{
"cells": [
{
"cell_type": "markdown",
"id": "0a9a7735",
"metadata": {},
"source": [
"# A.2 Reference design — Two coupled transmons\n",
"\n",
"Two transmons, each with its own multiplexed readout resonator, joined by a meandered coplanar-waveguide coupling bus — the building block of a two-qubit gate.\n",
"\n",
"> **Reference design — attribution.** Adapted, with attribution, from the open-source [SQDMetal](https://github.com/sqdlab/SQDMetal) project (Apache-2.0) and its benchmark devices in D. Sommers, P. Pakkiam, Z. Degnan, C.-C. Chiu, D. Gautam, Y.-H. Chen, and A. Fedorov, *\"Open-Source Highly Parallel Electromagnetic Simulations for Superconducting Circuits,\"* [arXiv:2511.01220](https://arxiv.org/abs/2511.01220) (2025). Re-implemented here with stock Quantum Metal components."
]
},
{
"cell_type": "markdown",
"id": "4737c02b",
"metadata": {},
"source": [
"[](https://colab.research.google.com/github/qiskit-community/qiskit-metal/blob/main/docs/tut/full-design-examples/A.2-Two-coupled-transmons.ipynb)\n",
"[](https://mybinder.org/v2/gh/qiskit-community/qiskit-metal/main?labpath=docs%2Ftut%2Ffull-design-examples%2FA.2-Two-coupled-transmons.ipynb)\n",
"\n",
"> 💡 **Running in Colab or Binder?** Skip the desktop GUI install — the cell below grabs the lite (no-Qt) wheel, and `qm.gui(design)` auto-picks an inline matplotlib viewer with the same API as the desktop `MetalGUI`."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "134cc2be",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:17.302619Z",
"iopub.status.busy": "2026-06-18T21:27:17.302439Z",
"iopub.status.idle": "2026-06-18T21:27:17.306253Z",
"shell.execute_reply": "2026-06-18T21:27:17.305148Z"
}
},
"outputs": [],
"source": [
"# In Colab / Binder, uncomment to install Quantum Metal (lite, no Qt).\n",
"# Locally you should already have it via `pip install quantum-metal` or\n",
"# `pip install 'quantum-metal[gui]'` for the desktop GUI.\n",
"# !pip install -q quantum-metal"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "add83f69",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:17.308231Z",
"iopub.status.busy": "2026-06-18T21:27:17.308063Z",
"iopub.status.idle": "2026-06-18T21:27:19.361806Z",
"shell.execute_reply": "2026-06-18T21:27:19.360487Z"
}
},
"outputs": [],
"source": [
"import qiskit_metal as qm\n",
"from qiskit_metal import Dict, designs\n",
"from qiskit_metal.qlibrary.qubits.transmon_pocket import TransmonPocket\n",
"from qiskit_metal.qlibrary.tlines.meandered import RouteMeander\n",
"from qiskit_metal.qlibrary.tlines.pathfinder import RoutePathfinder\n",
"from qiskit_metal.qlibrary.couplers.coupled_line_tee import CoupledLineTee\n",
"from qiskit_metal.qlibrary.terminations.launchpad_wb import LaunchpadWirebond\n",
"\n",
"design = designs.DesignPlanar()\n",
"design.overwrite_enabled = True\n",
"\n",
"# The default die is 9mm x 6mm; the launchpads below sit outside it.\n",
"design.chips.main.size.size_x = \"14mm\"\n",
"design.chips.main.size.size_y = \"9mm\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "806dd9a7",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:19.363928Z",
"iopub.status.busy": "2026-06-18T21:27:19.363718Z",
"iopub.status.idle": "2026-06-18T21:27:19.368449Z",
"shell.execute_reply": "2026-06-18T21:27:19.367523Z"
}
},
"outputs": [],
"source": [
"def feed(a, ap, b, bp, name):\n",
" \"\"\"Auto-route a coplanar-waveguide feedline segment between two pins.\"\"\"\n",
" RoutePathfinder(\n",
" design,\n",
" name,\n",
" options=dict(\n",
" fillet=\"90um\",\n",
" pin_inputs=Dict(\n",
" start_pin=Dict(component=a, pin=ap), end_pin=Dict(component=b, pin=bp)\n",
" ),\n",
" ),\n",
" )\n",
"\n",
"\n",
"def readout(clt, q, name, length):\n",
" \"\"\"Meandered lambda/4 readout resonator: coupled-line tee -> qubit readout pad.\"\"\"\n",
" RouteMeander(\n",
" design,\n",
" name,\n",
" options=dict(\n",
" fillet=\"90um\",\n",
" total_length=length,\n",
" lead=Dict(start_straight=\"100um\", end_straight=\"100um\"),\n",
" pin_inputs=Dict(\n",
" start_pin=Dict(component=clt, pin=\"second_end\"),\n",
" end_pin=Dict(component=q, pin=\"readout\"),\n",
" ),\n",
" ),\n",
" )"
]
},
{
"cell_type": "markdown",
"id": "62588bde",
"metadata": {},
"source": [
"## 1. Two transmons\n",
"\n",
"Each transmon gets a `readout` pad (top, outward) and a `coupler` pad (bottom, facing its neighbour)."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "40d21413",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:19.370318Z",
"iopub.status.busy": "2026-06-18T21:27:19.370136Z",
"iopub.status.idle": "2026-06-18T21:27:19.473597Z",
"shell.execute_reply": "2026-06-18T21:27:19.472415Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"
\n",
"
Q2TransmonPocketid 2 · 52 options, 7 changed · 2 pins, 0 connected
\n",
"

\n",
"
Options7 changed from the defaults
\n",
"changed from the class default (hover the name for the default)
\n",
"| option | value | parsed | description |
\n",
"| pos_x | '2.5mm' | 2.5 | The x/y position of the center of the QComponent. |
\n",
"| pos_y | '-1.5mm' | -1.5 | The x/y position of the center of the QComponent. |
\n",
"| orientation | '0.0' | 0.0 | The primary direction in degrees of the QComponent. Expressed counter-clockwise orientation. |
\n",
"| chip | 'main' | 'main' | Chip holding the QComponent. |
\n",
"| layer | '1' | 1.0 | Manufacturing layer used for the QComponent. |
\n",
"| connection_pads | | | The dictionary which contains all active connection lines for the qubit. |
\n",
"| readout | | | |
\n",
"| pad_gap | '15um' | 0.015 | Space between the connector pad and the charge island it is nearest to |
\n",
"| pad_width | '125um' | 0.125 | Width (x-axis) of the connector pad |
\n",
"| pad_height | '30um' | 0.03 | Height (y-axis) of the connector pad |
\n",
"| pad_cpw_shift | '5um' | 0.005 | Shift the connector pad cpw line by this much away from qubit |
\n",
"| pad_cpw_extent | '25um' | 0.025 | Shift the connector pad cpw line by this much away from qubit |
\n",
"| cpw_width | 'cpw_width' | 0.01 | Center trace width of the CPW line |
\n",
"| cpw_gap | 'cpw_gap' | 0.006 | Dielectric gap width of the CPW line |
\n",
"| cpw_extend | '100um' | 0.1 | Depth the connector line extense into ground (past the pocket edge) |
\n",
"| pocket_extent | '5um' | 0.005 | How deep into the pocket should we penetrate with the cpw connector (into the fround plane) |
\n",
"| pocket_rise | '65um' | 0.065 | How far up or downrelative to the center of the transmon should we elevate the cpw connection point on the ground plane |
\n",
"| loc_W | 1 | 1 | Width location only +-1 |
\n",
"| loc_H | 1 | 1 | Height location only +-1 |
\n",
"| coupler | | | |
\n",
"| pad_gap | '15um' | 0.015 | Space between the connector pad and the charge island it is nearest to |
\n",
"| pad_width | '125um' | 0.125 | Width (x-axis) of the connector pad |
\n",
"| pad_height | '30um' | 0.03 | Height (y-axis) of the connector pad |
\n",
"| pad_cpw_shift | '5um' | 0.005 | Shift the connector pad cpw line by this much away from qubit |
\n",
"| pad_cpw_extent | '25um' | 0.025 | Shift the connector pad cpw line by this much away from qubit |
\n",
"| cpw_width | 'cpw_width' | 0.01 | Center trace width of the CPW line |
\n",
"| cpw_gap | 'cpw_gap' | 0.006 | Dielectric gap width of the CPW line |
\n",
"| cpw_extend | '100um' | 0.1 | Depth the connector line extense into ground (past the pocket edge) |
\n",
"| pocket_extent | '5um' | 0.005 | How deep into the pocket should we penetrate with the cpw connector (into the fround plane) |
\n",
"| pocket_rise | '65um' | 0.065 | How far up or downrelative to the center of the transmon should we elevate the cpw connection point on the ground plane |
\n",
"| loc_W | -1 | -1 | Width location only +-1 |
\n",
"| loc_H | -1 | -1 | Height location only +-1 |
\n",
"| pad_gap | '30um' | 0.03 | The distance between the two charge islands, which is also the resulting 'length' of the pseudo junction |
\n",
"| inductor_width | '20um' | 0.02 | Width of the pseudo junction between the two charge islands (if in doubt, make the same as pad_gap). Really just for simulating in HFSS / other EM software |
\n",
"| pad_width | '425um' | 0.425 | The width (x-axis) of the charge island pads |
\n",
"| pad_height | '90um' | 0.09 | The size (y-axis) of the charge island pads |
\n",
"| pocket_width | '650um' | 0.65 | Size of the pocket (cut out in ground) along x-axis |
\n",
"| pocket_height | '650um' | 0.65 | Size of the pocket (cut out in ground) along y-axis |
\n",
"| hfss_wire_bonds | False | False | Add wire bonds over this path when rendered to hfss. |
\n",
"| q3d_wire_bonds | False | False | Add wire bonds over this path when rendered to q3d. |
\n",
"| aedt_q3d_wire_bonds | False | False | Add wire bonds over this path when rendered to aedt_q3d. |
\n",
"| aedt_hfss_wire_bonds | False | False | Add wire bonds over this path when rendered to aedt_hfss. |
\n",
"| hfss_inductance | '10nH' | '10nH' | Junction inductance used when the junction is rendered to hfss. |
\n",
"| hfss_capacitance | 0 | 0 | Junction capacitance used by hfss (0: none). |
\n",
"| hfss_resistance | 0 | 0 | Junction resistance used by hfss (0: none). |
\n",
"| hfss_mesh_kw_jj | 7e-06 | 7e-06 | Largest mesh element on the junction in hfss, in meters. |
\n",
"| q3d_inductance | '10nH' | '10nH' | Junction inductance used when the junction is rendered to q3d. |
\n",
"| q3d_capacitance | 0 | 0 | Junction capacitance used by q3d (0: none). |
\n",
"| q3d_resistance | 0 | 0 | Junction resistance used by q3d (0: none). |
\n",
"| q3d_mesh_kw_jj | 7e-06 | 7e-06 | Largest mesh element on the junction in q3d, in meters. |
\n",
"| gds_cell_name | 'my_other_junction' | 'my_other_junction' | Cell of the junction GDS file (the GDS renderer's path_filename) that replaces this component's junction on export. |
\n",
"| aedt_q3d_inductance | 1e-08 | 1e-08 | Junction inductance used when the junction is rendered to aedt_q3d. |
\n",
"| aedt_q3d_capacitance | 0 | 0 | Junction capacitance used by aedt_q3d (0: none). |
\n",
"| aedt_hfss_inductance | 1e-08 | 1e-08 | Junction inductance used when the junction is rendered to aedt_hfss. |
\n",
"| aedt_hfss_capacitance | 0 | 0 | Junction capacitance used by aedt_hfss (0: none). |
\n",
"
\n",
"
Pins2 pins, 0 connected
| pin | middle (mm) | normal | width (mm) | connected to |
|---|
| readout | (2.9250, -1.3050) | 0.0° | 0.01 | — |
| coupler | (2.0750, -1.6950) | 180.0° | 0.01 | — |
\n",
"
"
],
"text/plain": [
"\u001b[95m\u001b[1mname: \u001b[94m\u001b[1mQ2\u001b[0m\n",
"\u001b[95m\u001b[1mclass: \u001b[94m\u001b[1mTransmonPocket \u001b[0m\n",
"\u001b[95m\u001b[1moptions: \u001b[0m\n",
" 'pos_x' : '2.5mm', \n",
" 'pos_y' : '-1.5mm', \n",
" 'orientation' : '0.0', \n",
" 'chip' : 'main', \n",
" 'layer' : '1', \n",
" \u001b[1m'connection_pads' \u001b[0m: {\n",
" \u001b[1m'readout' \u001b[0m: {\n",
" 'pad_gap' : '15um', \n",
" 'pad_width' : '125um', \n",
" 'pad_height' : '30um', \n",
" 'pad_cpw_shift' : '5um', \n",
" 'pad_cpw_extent' : '25um', \n",
" 'cpw_width' : 'cpw_width', \n",
" 'cpw_gap' : 'cpw_gap', \n",
" 'cpw_extend' : '100um', \n",
" 'pocket_extent' : '5um', \n",
" 'pocket_rise' : '65um', \n",
" 'loc_W' : 1, \n",
" 'loc_H' : 1, \n",
" },\n",
" \u001b[1m'coupler' \u001b[0m: {\n",
" 'pad_gap' : '15um', \n",
" 'pad_width' : '125um', \n",
" 'pad_height' : '30um', \n",
" 'pad_cpw_shift' : '5um', \n",
" 'pad_cpw_extent' : '25um', \n",
" 'cpw_width' : 'cpw_width', \n",
" 'cpw_gap' : 'cpw_gap', \n",
" 'cpw_extend' : '100um', \n",
" 'pocket_extent' : '5um', \n",
" 'pocket_rise' : '65um', \n",
" 'loc_W' : -1, \n",
" 'loc_H' : -1, \n",
" },\n",
" },\n",
" 'pad_gap' : '30um', \n",
" 'inductor_width' : '20um', \n",
" 'pad_width' : '425um', \n",
" 'pad_height' : '90um', \n",
" 'pocket_width' : '650um', \n",
" 'pocket_height' : '650um', \n",
" 'hfss_wire_bonds' : False, \n",
" 'q3d_wire_bonds' : False, \n",
" 'aedt_q3d_wire_bonds': False, \n",
" 'aedt_hfss_wire_bonds': False, \n",
" 'hfss_inductance' : '10nH', \n",
" 'hfss_capacitance' : 0, \n",
" 'hfss_resistance' : 0, \n",
" 'hfss_mesh_kw_jj' : 7e-06, \n",
" 'q3d_inductance' : '10nH', \n",
" 'q3d_capacitance' : 0, \n",
" 'q3d_resistance' : 0, \n",
" 'q3d_mesh_kw_jj' : 7e-06, \n",
" 'gds_cell_name' : 'my_other_junction', \n",
" 'aedt_q3d_inductance': 1e-08, \n",
" 'aedt_q3d_capacitance': 0, \n",
" 'aedt_hfss_inductance': 1e-08, \n",
" 'aedt_hfss_capacitance': 0, \n",
"\u001b[95m\u001b[1mmodule: \u001b[94m\u001b[1mqiskit_metal.qlibrary.qubits.transmon_pocket\u001b[0m\n",
"\u001b[95m\u001b[1mid: \u001b[94m\u001b[1m2\u001b[0m"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"TransmonPocket(\n",
" design,\n",
" \"Q1\",\n",
" options=dict(\n",
" pos_x=\"-2.5mm\",\n",
" pos_y=\"-1.5mm\",\n",
" pad_width=\"425um\",\n",
" pocket_height=\"650um\",\n",
" connection_pads=dict(\n",
" readout=dict(loc_W=-1, loc_H=1), coupler=dict(loc_W=1, loc_H=-1)\n",
" ),\n",
" ),\n",
")\n",
"TransmonPocket(\n",
" design,\n",
" \"Q2\",\n",
" options=dict(\n",
" pos_x=\"2.5mm\",\n",
" pos_y=\"-1.5mm\",\n",
" pad_width=\"425um\",\n",
" pocket_height=\"650um\",\n",
" connection_pads=dict(\n",
" readout=dict(loc_W=1, loc_H=1), coupler=dict(loc_W=-1, loc_H=-1)\n",
" ),\n",
" ),\n",
")"
]
},
{
"cell_type": "markdown",
"id": "882839a7",
"metadata": {},
"source": [
"## 2. Shared feedline + two readout resonators\n",
"\n",
"One feedline, two coupled-line tees, two resonators of slightly different length (frequency-multiplexed readout)."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "e357691e",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:19.475938Z",
"iopub.status.busy": "2026-06-18T21:27:19.475746Z",
"iopub.status.idle": "2026-06-18T21:27:19.656884Z",
"shell.execute_reply": "2026-06-18T21:27:19.655653Z"
}
},
"outputs": [],
"source": [
"CoupledLineTee(\n",
" design,\n",
" \"clt1\",\n",
" options=dict(\n",
" pos_x=\"-2.5mm\",\n",
" pos_y=\"1.5mm\",\n",
" coupling_length=\"350um\",\n",
" down_length=\"300um\",\n",
" fillet=\"90um\",\n",
" open_termination=False,\n",
" ),\n",
")\n",
"CoupledLineTee(\n",
" design,\n",
" \"clt2\",\n",
" options=dict(\n",
" pos_x=\"2.5mm\",\n",
" pos_y=\"1.5mm\",\n",
" coupling_length=\"350um\",\n",
" down_length=\"300um\",\n",
" fillet=\"90um\",\n",
" open_termination=False,\n",
" ),\n",
")\n",
"LaunchpadWirebond(\n",
" design, \"LP1\", options=dict(pos_x=\"-6mm\", pos_y=\"1.5mm\", orientation=\"0\")\n",
")\n",
"LaunchpadWirebond(\n",
" design, \"LP2\", options=dict(pos_x=\"6mm\", pos_y=\"1.5mm\", orientation=\"180\")\n",
")\n",
"feed(\"LP1\", \"tie\", \"clt1\", \"prime_start\", \"feed_L\")\n",
"feed(\"clt1\", \"prime_end\", \"clt2\", \"prime_start\", \"feed_M\")\n",
"feed(\"clt2\", \"prime_end\", \"LP2\", \"tie\", \"feed_R\")\n",
"readout(\"clt1\", \"Q1\", \"read1\", \"7.0mm\")\n",
"readout(\"clt2\", \"Q2\", \"read2\", \"7.2mm\")"
]
},
{
"cell_type": "markdown",
"id": "753604bb",
"metadata": {},
"source": [
"## 3. Qubit-qubit coupling bus\n",
"\n",
"A meandered CPW between the two `coupler` pads sets the exchange coupling."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "c1a15ae2",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:19.659469Z",
"iopub.status.busy": "2026-06-18T21:27:19.659139Z",
"iopub.status.idle": "2026-06-18T21:27:19.716235Z",
"shell.execute_reply": "2026-06-18T21:27:19.714997Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:53PM 22s WARNING [check_lengths]: For path table, component=coupler_bus, key=trace has short segments that could cause issues with fillet. Values in (37-38) are index(es) in shapely geometry.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"06:53PM 22s WARNING [check_lengths]: For path table, component=coupler_bus, key=cut has short segments that could cause issues with fillet. Values in (37-38) are index(es) in shapely geometry.\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"
coupler_busRouteMeanderid 12 · 23 options, 9 changed · 2 pins, 2 connected
\n",
"

\n",
"
Options9 changed from the defaults
\n",
"changed from the class default (hover the name for the default)
\n",
"| option | value | parsed | description |
\n",
"| chip | 'main' | 'main' | Chip holding the QComponent. |
\n",
"| layer | '1' | 1.0 | Manufacturing layer used for the QComponent. |
\n",
"| pin_inputs | | | |
\n",
"| start_pin | | | Component and pin string pair. Define which pin to start from |
\n",
"| component | 'Q1' | 'Q1' | Name of component to start from, which has a pin |
\n",
"| pin | 'coupler' | 'coupler' | Name of pin used for pin_start |
\n",
"| end_pin | | | Component and pin string pair. Define which pin to start from |
\n",
"| component | 'Q2' | 'Q2' | Name of component to end on, which has a pin |
\n",
"| pin | 'coupler' | 'coupler' | Name of pin used for pin_end |
\n",
"| fillet | '90um' | 0.09 | |
\n",
"| lead | | | |
\n",
"| start_straight | '150um' | 0.15 | Lead-in, defined as the straight segment extension from start_pin. Defaults to 0.1um. |
\n",
"| end_straight | '150um' | 0.15 | Lead-out, defined as the straight segment extension from end_pin. Defaults to 0.1um. |
\n",
"| start_jogged_extension | '' | '' | Lead-in, jogged extension of lead-in. Described as list of tuples |
\n",
"| end_jogged_extension | '' | '' | Lead-out, jogged extension of lead-out. Described as list of tuples |
\n",
"| total_length | '8mm' | 8 | |
\n",
"| trace_width | 'cpw_width' | 0.01 | Defines the width of the line. Defaults to 'cpw_width'. |
\n",
"| meander | | | |
\n",
"| spacing | '200um' | 0.2 | Minimum spacing between adjacent meander curves. Defaults to 200um. |
\n",
"| asymmetry | '200um' | 0.2 | offset between the center-line of the meander and the center-line that stretches from the tip of lead-in to the x (or y) coordinate of the tip of the lead-out. Defaults to '0um'. |
\n",
"| snap | 'true' | 'true' | |
\n",
"| prevent_short_edges | 'true' | 'true' | |
\n",
"| hfss_wire_bonds | False | False | Add wire bonds over this path when rendered to hfss. |
\n",
"| q3d_wire_bonds | False | False | Add wire bonds over this path when rendered to q3d. |
\n",
"| aedt_q3d_wire_bonds | False | False | Add wire bonds over this path when rendered to aedt_q3d. |
\n",
"| aedt_hfss_wire_bonds | False | False | Add wire bonds over this path when rendered to aedt_hfss. |
\n",
"| trace_gap | 'cpw_gap' | 0.006 | |
\n",
"| _actual_length | '7.999999999999844 mm' | 7.999999999999844 | |
\n",
"
\n",
"
Pins2 pins, 2 connected
| pin | middle (mm) | normal | width (mm) | connected to |
|---|
| start | (-2.0750, -1.6950) | 180.0° | 0.01 | Q1.coupler |
| end | (2.0750, -1.6950) | 0.0° | 0.01 | Q2.coupler |
\n",
"
"
],
"text/plain": [
"\u001b[95m\u001b[1mname: \u001b[94m\u001b[1mcoupler_bus\u001b[0m\n",
"\u001b[95m\u001b[1mclass: \u001b[94m\u001b[1mRouteMeander \u001b[0m\n",
"\u001b[95m\u001b[1moptions: \u001b[0m\n",
" 'chip' : 'main', \n",
" 'layer' : '1', \n",
" \u001b[1m'pin_inputs' \u001b[0m: {\n",
" \u001b[1m'start_pin' \u001b[0m: {\n",
" 'component' : 'Q1', \n",
" 'pin' : 'coupler', \n",
" },\n",
" \u001b[1m'end_pin' \u001b[0m: {\n",
" 'component' : 'Q2', \n",
" 'pin' : 'coupler', \n",
" },\n",
" },\n",
" 'fillet' : '90um', \n",
" \u001b[1m'lead' \u001b[0m: {\n",
" 'start_straight' : '150um', \n",
" 'end_straight' : '150um', \n",
" 'start_jogged_extension': '', \n",
" 'end_jogged_extension': '', \n",
" },\n",
" 'total_length' : '8mm', \n",
" 'trace_width' : 'cpw_width', \n",
" \u001b[1m'meander' \u001b[0m: {\n",
" 'spacing' : '200um', \n",
" 'asymmetry' : '200um', \n",
" },\n",
" 'snap' : 'true', \n",
" 'prevent_short_edges': 'true', \n",
" 'hfss_wire_bonds' : False, \n",
" 'q3d_wire_bonds' : False, \n",
" 'aedt_q3d_wire_bonds': False, \n",
" 'aedt_hfss_wire_bonds': False, \n",
" 'trace_gap' : 'cpw_gap', \n",
" '_actual_length' : '7.999999999999844 mm', \n",
"\u001b[95m\u001b[1mmodule: \u001b[94m\u001b[1mqiskit_metal.qlibrary.tlines.meandered\u001b[0m\n",
"\u001b[95m\u001b[1mid: \u001b[94m\u001b[1m12\u001b[0m"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RouteMeander(\n",
" design,\n",
" \"coupler_bus\",\n",
" options=dict(\n",
" fillet=\"90um\",\n",
" total_length=\"8mm\",\n",
" lead=Dict(start_straight=\"150um\", end_straight=\"150um\"),\n",
" meander=Dict(asymmetry=\"200um\"),\n",
" pin_inputs=Dict(\n",
" start_pin=Dict(component=\"Q1\", pin=\"coupler\"),\n",
" end_pin=Dict(component=\"Q2\", pin=\"coupler\"),\n",
" ),\n",
" ),\n",
")"
]
},
{
"cell_type": "markdown",
"id": "1b527d31",
"metadata": {},
"source": [
"## 4. Visualize"
]
},
{
"cell_type": "markdown",
"id": "14ac4481",
"metadata": {},
"source": [
"## Next steps\n",
"\n",
"- **Inspect** the design tree: `design.components.keys()` and `design.qgeometry.tables`.\n",
"- **Export GDS** for fabrication: `design.renderers.gds.export_to_gds('chip.gds')` (Quantum Metal uses the modern `gdstk` backend).\n",
"- **Simulate**: render to Ansys HFSS/Q3D (the validation gold standard) or to the open-source FEM path (Gmsh + Elmer today; AWS Palace on the roadmap) to extract eigenmodes, *Q*, and the capacitance matrix.\n",
"- **Tweak**: every dimension above is a parameter — change `total_length` to retune resonator frequencies, or `pos_x`/`pos_y` to relayout."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "51565fbd",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:19.718193Z",
"iopub.status.busy": "2026-06-18T21:27:19.717997Z",
"iopub.status.idle": "2026-06-18T21:27:19.722356Z",
"shell.execute_reply": "2026-06-18T21:27:19.721484Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"['Q1',\n",
" 'Q2',\n",
" 'clt1',\n",
" 'clt2',\n",
" 'LP1',\n",
" 'LP2',\n",
" 'feed_L',\n",
" 'feed_M',\n",
" 'feed_R',\n",
" 'read1',\n",
" 'read2',\n",
" 'coupler_bus']"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"design.components.keys()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "18ef97e0",
"metadata": {
"execution": {
"iopub.execute_input": "2026-06-18T21:27:19.724134Z",
"iopub.status.busy": "2026-06-18T21:27:19.723948Z",
"iopub.status.idle": "2026-06-18T21:27:19.885363Z",
"shell.execute_reply": "2026-06-18T21:27:19.884537Z"
}
},
"outputs": [
{
"data": {
"image/png": "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qbR4AwAAAAlA8AYAAAASgOANAAAAJADBGwAAAEgAgjcAAACQAARvAAAAIAEI3gAAAEACELwBAACABCB4AwAAAAlA8AYAAAASgOANAAAAJADBGwAAAEgAgjcAAACQAARvAAAAIAEI3gAAAEACELwBAACABCB4AwAAAAngsLqAgQiFQpKkyspKiysBAAAA/q07n3bn1f4Mi+BdW1srSZo3b57FlQAAAADRamtrNWHChH4fY5imaSamnOPX0dGhHTt2KDc3Vw7HsPisYJnKykrNmzdPmzdvVkFBgdXljEhc48HF9R18XOPBxfUdfFzjwcX1PTahUEi1tbWaOXOmkpOT+33ssEixycnJmjt3rtVlDCsFBQUaO3as1WWMaFzjwcX1HXxc48HF9R18XOPBxfUduHgt3d0YXAkAAAAkAMEbAAAASACC9wjj8Xh05513yuPxWF3KiMU1Hlxc38HHNR5cXN/BxzUeXFzfwTMsBlcCAAAAwx0t3gAAAEACELwBAACABCB4AwAAAAlA8AYAAAASYFgsoIPjd/DgQb366quqq6vTRRddpHPOOcfqkkakgwcP6u9//7tGjx6tpUuXWl3OiGGapl555RW9/fbbys/P1xVXXKHRo0dbXdawZpqmNm3apPXr1ys3N1eLFy/WmDFjrC5rxAiFQlq9erW2b9+uwsJCLVu2TFlZWVaXNWIVFRXpn//8p6ZOnaoLL7zQ6nJGjPfff1+vvvqqAoGAFi9erDPOOMPqkkYOEyPWn/70JzMpKcmU1PPfbbfdZkYiEatLG1HC4bC5YMECU5J5ySWXWF3OiBEIBMzLLrus1+9venq6uWbNGqtLG7bC4bB5++2397qmHo/HfP31160ubURoamoy586d2+v65uXlmZs2bbK6tBHJ7/ebU6dONSWZN9xwg9XljBi/+MUvTMMwen6HbTabed9991ld1ohBV5MR6sCBA/roRz+qyy+/XMXFxWpubtZnPvMZPfTQQ1q1apXV5Y0oTz75pDZs2GB1GSPOAw88oJdffllPPfWUAoGADh48qOnTp+tTn/qU/H6/1eUNS88995wefPBBffWrX1VDQ4N27typMWPG6KqrrpLP57O6vGHvW9/6lt5991395S9/UTAY1M6dO5Wenq5Pf/rTMpm594S79957tW/fPqvLGFE2bNigL3/5y7r55ptVXl6u2tpaXXbZZbrjjju0efNmq8sbGaxO/hgct912m5mZmWn6fL6ebXV1debVV19tPvTQQxZWNrJUVFSYXq/XvOqqq8z8/HxavE+g888/35w8eXKvbU8++aQpyXzrrbcsqmp4mz9/vjlp0qRe33qtX7/elGQ+/vjjFlY2MkycONG88MILe2278847TUlmaWmpNUWNUEVFRabT6TS/+MUv0uJ9Al177bXm1KlTe/2N2Ldvn7ls2TLz97//vYWVjRz08R6hVq1apUsvvVRNTU167rnnVFFRoYsuukh//vOfrS5tRLn11lsVDof1yCOP6Oyzz7a6nBFl7dq1Udu2bNkiSfSZPQ4dHR3atGmTbrnlFhmG0bP93HPPlcfj0fr16/WFL3zBwgqHv127dslm6/1F8pYtW2S325Wenm5RVSNPJBLRzTffrLy8PN177716/PHHrS5pRIhEIlq9erVuvfVWHT58WH/729/U0tKixYsX64UXXrC6vBGD4D0ChcNhlZWVqaKiQjNmzFBDQ0PPvq985Sv62c9+ZmF1I8fq1au1cuVKPfLIIxo7dqzV5Yw4Lper17+Lior0zDPPaNGiRTrllFMsqmr4Kisrk6Sowal2u12jRo1SSUmJFWWNKMnJyb3+/frrr+ull17S9ddfL6/Xa1FVI88TTzyhjRs36s9//jNLmp9A1dXV6uzsVFFRkU477bSeLn3f/OY3dd999+kb3/iGxRWODATvYWj37t09b6JHy83NVX5+vkKhkNavX69bb71Vd911l8LhsG6//Xb9/Oc/1/nnn69rrrkmwVUPH/Gu76xZs9Ta2qovf/nLmj9/vr70pS8luMLhbyDX+EjV1dW64oor5PV69cwzzySixBGnqalJkuR2u6P2paamqrGxMcEVjWx79+7VNddco+nTp+vhhx+2upwRo7y8XHfccYeuvvpqXX311QqFQlaXNGKUl5dLkl5++WXde++9uuWWW9Tc3KzPf/7z+uY3v6nzzz+fmdFOBKv7uuDY/cd//EevUfNH/rds2TLT7/ebhmGYEyZMMEOhUM9x7e3tpsvlMj/+8Y9bWP3QF+/6mqZp3nLLLabdbje3bdvWcxx9vAduINe4W3Nzszl79mzT5XKZmzdvtqbgEaC8vNyUZN51111R+woLC81LL73UgqpGpvLycnPChAlmRkaGuX//fqvLGVGuvvpqMz093SwrKzNN0zSDwSB9vE+Q4uJiU5J57rnn9tpeUlJiSjK/9rWvWVTZyEKL9zD0xS9+UZdddlnMffn5+UpOTlZhYaEKCwtlt9t79rndbmVlZamysjJRpQ5L8a5vRUWFHn30Ubndbt188809++rr67V582adc845euKJJ6JabfFv8a5xt46ODi1btkzbtm3Tc889p7lz5yaqxBFn1KhRcrlc2rVrV6/tTU1Nqqio0JIlSyyqbGRpbGzUZZddpurqar3yyiuaPHmy1SWNGO+++66ef/55ZWZm6tprr5WkntliXnzxRZ1zzjl6/vnnVVBQYGWZw1ZhYaGSkpI0YcKEXttHjRolm81GdjhBCN7D0IwZMzRjxox+H3PhhRfqz3/+s6qrq3uCzHvvvafKykp97GMfS0SZw1a861teXq6LL744arthGHI4HEpLS4saYIXeBvI7HAqF9IlPfELr1q3T008/3fNGi+Njs9l03XXXaeXKlaqsrOwJJ88884xCoZBWrFhhcYXDn8/n05VXXqndu3dr9erVOv/8860uaURxOBy65JJLem2LRCI9+9LS0noNHMaxsdvtOu+887R+/Xq1t7crNTVVkvS3v/1NkUhEs2fPtrjCkcEwTSYXHYlKS0s1bdo0jR49Wl/4whfU0dGhRx55RIFAQLt27WKlukEwatQozZgxQ6+++qrVpYwIX/7yl/XLX/5S06dPjwrdixcv1gUXXGBRZcNXUVGR5s+fr3Hjxummm25SVVWVHn74YX3oQx/SunXrCC0f0JVXXqnVq1dr7ty5Wrx4ca99y5cv15lnnmlNYSNYKBSS0+nUDTfcoKefftrqcoa9rVu36qyzztKsWbN0/fXXq66uTg8//LAyMzN75qXHB2RxVxcMos2bN5szZswwJZmGYZjz5883t2/fbnVZIxZ9vE+s8ePH99kP/Ec/+pHV5Q1bGzduNKdPn25KMl0ul/nRj37UbG1ttbqsEcFut/f5O/vMM89YXd6IRB/vE+9vf/ubOXHiRFOSabfbzUWLFpnFxcVWlzVi0OJ9Eqirq5PL5eKTKoAedXV1Sk9Pj5q2EQBM01R1dbU8Hk/MmZBw/AjeAAAAQAIwAgwAAABIAII3AAAAkAAEbwAAACABCN4AAABAAhC8AQAAgAQgeAMAAAAJQPAGAAAAEoDgDQAAACQAwRsAAABIAII3AAAAkAAEbwAAACAB/j9xZfK7eTjQCQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = qm.view(design)\n",
"qm.show_inline(fig)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.11.15"
}
},
"nbformat": 4,
"nbformat_minor": 5
}