Source code for qpdk.samples.hyperbolic_lattice_chip

# /// script
# requires-python = ">=3.12,<3.15"
# dependencies = [
#   "qpdk[models] @ git+https://github.com/gdsfactory/quantum-rf-pdk.git",
# ]
# ///
# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: percent
#       format_version: '1.3'
#       jupytext_version: 1.17.3
# ---

# %% [markdown]
# # Hyperbolic Lattice Chip
#
# A {7,3} hyperbolic lattice of CPW edge resonators in the scheme of
# {cite:p}`kollarHyperbolicLatticesCircuit2019`: one meandered resonator per
# edge of the heptagon tiling, a three-pin capacitive coupler on every vertex,
# shorted stubs on the free boundary pins and two probe launchers.
#
# Near the full-wave mode of the resonators the photons hop on the line graph
# of the tiling with $t < 0$, so the spectrum has a flat band at
# $\omega_0 - 2|t|$. The SAX model
# {func}`qpdk.models.hyperbolic.hyperbolic_lattice` evaluates the same circuit.

# %%
import gdsfactory as gf

from qpdk import PDK
from qpdk.cells.chip import chip_edge
from qpdk.cells.hyperbolic import hyperbolic_lattice


# %%
[docs] @gf.cell def hyperbolic_lattice_chip( p: int = 7, q: int = 3, shells: int = 1, resonator_length: float = 7500.0, edge_margin: float = 500.0, ) -> gf.Component: """Returns a hyperbolic lattice of edge resonators framed by a chip edge. Args: p: Polygon side count of the tiling. q: Polygons per vertex, i.e. coupler pins. shells: Polygon rings around the central polygon. resonator_length: Length of every edge resonator in µm. edge_margin: Clearance between the lattice and the chip edge in µm. """ c = gf.Component() lattice = c << hyperbolic_lattice( p=p, q=q, shells=shells, resonator_length=resonator_length ) bbox = lattice.dbbox() edge = c << chip_edge( size=(bbox.width() + 2 * edge_margin, bbox.height() + 2 * edge_margin) ) edge.move((bbox.left - edge_margin, bbox.bottom - edge_margin)) c.add_ports(lattice.ports) return c
# %% if __name__ == "__main__": PDK.activate() hyperbolic_lattice_chip().show()