Introduction to Cirq

This notebook demonstrates how to run quantum circuits on VTT QX using Cirq, Google’s open-source quantum computing framework. Cirq gives you direct control over circuit construction and gate-level operations, and integrates with IQM hardware via the cirq-iqm package.

In this example, a 3-qubit GHZ state is prepared and executed on a VTT QX device, and the measurement results are printed and plotted.

Setup

This notebook uses the following requirements.

uv pip install "iqm-client[cirq]>=34.0.0,<35.0.0"
uv pip install matplotlib
import os

from iqm.cirq_iqm.iqm_sampler import IQMSampler

os.environ["IQM_TOKEN"] = ""
sampler = IQMSampler(
    url="https://qx.vtt.fi",
    quantum_computer="demo",  # Replace with 'q50' as needed
)

Job submission using Cirq

import cirq
from collections import Counter
from matplotlib import pyplot as plt

# Create named qubits (IQM uses 1-based naming)
q1, q2, q3 = cirq.NamedQubit("QB1"), cirq.NamedQubit("QB2"), cirq.NamedQubit("QB3")

# This example creates a GHZ state, replace it with your own code
circuit = cirq.Circuit(
    [
        cirq.H(q1),
        cirq.CNOT(q1, q2),
        cirq.CNOT(q1, q3),
        cirq.measure(q1, q2, q3, key="result"),
    ]
)
print(circuit)

routed_circuit, _, _ = sampler.device.route_circuit(circuit)
decomposed_circuit = sampler.device.decompose_circuit(routed_circuit)

# Execute it on the quantum computing backend
result = sampler.run(decomposed_circuit, repetitions=1000)

# Print and plot the result
measurements = result.measurements["result"]
counts = Counter(["".join(map(str, row)) for row in measurements])
probs = {k: v / sum(counts.values()) for k, v in sorted(counts.items())}

print(probs)

plt.bar(probs.keys(), probs.values())
plt.xlabel("Measurement outcomes")
plt.ylabel("Probability")
plt.show()