"""ARRAY — repeat a cell on a regular grid.

`lm.ARRAY(child, count, pitch)` creates a periodic array reference. It
emits a single AREF in GDS — far cheaper than placing N copies, and
edits to the child propagate to every instance.
"""
import lumicron as lm
import lumicron.pdks.elyon_demo.all as pdk


@lm.pcell
def Pad():
    """A single 80 × 80 µm metal-1 pad."""
    c = lm.CELL("Pad")
    pad = lm.Rectangle(x_dim=80, y_dim=80, layer=pdk.LAYER.MTL1)
    c.add(pad)
    c.Place(pad).at((0, 0))
    return c


@lm.pcell
def PadStrip():
    """1×8 linear pad array on a 127 µm pitch."""
    c = lm.CELL("PadStrip")
    pad_array = lm.ARRAY(Pad(), count=8, pitch=(127, 0))
    c.add(pad_array)
    c.Place(pad_array).at((0, 0))
    return c


if __name__ == "__main__":
    PadStrip().to_gds("pad_strip.gds")
