{ "cells": [ { "cell_type": "markdown", "id": "0d777102", "metadata": {}, "source": [ "# Examples\n", "\n", "Welcome to this **QForge** tutorial. Unlike standard algorithmic simulators, QForge operates at the physical hardware layer. \n", "\n", "### What is demonstrated\n", "* **Hardware Instantiation:** How to define a Transmon qubit with specific physical parameters ($E_J$, $E_C$) and extract its native transition frequencies.\n", "* **Automated Calibration:** Using the `GateEngine` to analytically estimate and numerically sweep for the optimal duration of microwave pulses (X and H gates).\n", "* **Time-Domain Simulation:** Executing a Hamiltonian simulation of the calibrated pulses using the underlying QuTiP solvers.\n", "* **Leakage Analysis:** Tracking populations beyond the computational basis to observe leakage into the $|2\\rangle$ state during fast pulses." ] }, { "cell_type": "code", "execution_count": 1, "id": "b47ddcd1", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import os\n", "from qforge.utils.terminal_plot import TerminalPlotter\n", "from qforge import QubitEngine\n", "from qforge.core.gate_engine import GateEngine\n", "\n", "import matplotlib\n", "matplotlib.use('Agg')\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "id": "7212ccf6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "============================================================\n", " Example 14: Single Qubit Gate (X & H) Automated Calibration\n", "============================================================\n", "[CACHE INIT] No existing cache file found. Starting fresh.\n", "\n", "[CALIBRATION]: Finding optimal durations for Amp = 0.02 GHz...\n", "Calibrating X (local) on Q1...\n", " -> Analytical coarse sweep (20 points near estimate)...\n", " -> Fine sweep (20 points) zooming in on [54.29, 57.18]...\n", " -> Calibrated Duration: 55.2018 (Metric: 0.9975)\n", " -> Calibrated X-Pulse Duration: 55.20 ns (Fidelity: 0.9975)\n", "Calibrating H (local) on Q1...\n", " -> Analytical coarse sweep (20 points near estimate)...\n", " -> Fine sweep (20 points) zooming in on [27.14, 28.59]...\n", " -> Calibrated Duration: 27.4485 (Metric: 0.9982)\n", " -> Calibrated H-Pulse Duration: 27.45 ns (Fidelity: 0.9982)\n", "\n", "[EVOLUTION]: Simulating X-Gate dynamics...\n", "\n", " Time (ns) | P(|0>) | P(|1>) | P(|2>) (Leakage)\n", " ----------------------------------------------\n", " 0.00 | 1.000 | 0.000 | 0.000000\n", " 11.27 | 0.997 | 0.003 | 0.000000\n", " 22.53 | 0.805 | 0.194 | 0.000255\n", " 33.80 | 0.146 | 0.853 | 0.000971\n", " 45.06 | 0.004 | 0.996 | 0.000048\n", " 55.20 | 0.003 | 0.997 | 0.000000\n", "\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mAutomated Single Qubit X-Gate | Duration: 55.20 ns\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m┌┬─────────────────┬──────────────────┬─────────────────┬─────────────────┬┐\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m1.00┼\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m P(|0>) \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───────────────┼──────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••••••••••••••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m P(|1>) \u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;54m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m P(|2>) (Leakage) \u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.83┼┼─────────────────┼──────────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────┼─────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.67┼┼─────────────────┼─────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───┼──\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m─────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.50┼┼─────────────────┼─────────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┼─────────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.33┼┼─────────────────┼──────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───┼──\u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.17┼┼─────────────────┼───────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────┼─────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.00┼\u001b[0m\u001b[48;5;0m\u001b[38;5;54m••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m└┼─────────────────┼──────────────────┼─────────────────┼─────────────────┼┘\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m0.0\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m13.8\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m27.6\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m41.4\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m55.2\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3mExpectation Value\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mTime (ns)\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\n", "[EVOLUTION]: Simulating H-Gate dynamics...\n", "\n", " Time (ns) | P(|0>) | P(|1>) | P(|2>) (Leakage)\n", " ----------------------------------------------\n", " 0.00 | 1.000 | 0.000 | 0.000000\n", " 5.60 | 0.999 | 0.001 | 0.000000\n", " 11.20 | 0.949 | 0.051 | 0.000074\n", " 16.81 | 0.694 | 0.306 | 0.000357\n", " 22.41 | 0.526 | 0.474 | 0.000026\n", " 27.45 | 0.505 | 0.495 | 0.000000\n", "\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mAutomated Single Qubit H-Gate | Duration: 27.45 ns\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m┌┬─────────────────┬──────────────────┬─────────────────┬─────────────────┬┐\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m1.00┼\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m P(|0>) \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m─────────┼─────────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m P(|1>) \u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;54m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m P(|2>) (Leakage) \u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.83┼┼─────────────────┼──────────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.67┼┼─────────────────┼──────────────────┼──────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.50┼┼─────────────────┼──────────────────┼─────────────────┼───\u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••••••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.33┼┼─────────────────┼──────────────────┼───────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.17┼┼─────────────────┼──────────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m─────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.00┼\u001b[0m\u001b[48;5;0m\u001b[38;5;54m••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m└┼─────────────────┼──────────────────┼─────────────────┼─────────────────┼┘\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m0.0\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m6.9\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m13.7\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m20.6\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m27.4\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3mExpectation Value\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mTime (ns)\u001b[0m\u001b[48;5;0m \u001b[0m\n" ] } ], "source": [ "def simulate_and_plot(g_eng, gate_type, duration, drive_amp, w01):\n", " \"\"\"Simulates the gate dynamics and prints the population table and graph.\"\"\"\n", " print(f\"\\n[EVOLUTION]: Simulating {gate_type}-Gate dynamics...\")\n", " \n", " drives = [{\"target\": 0, \"type\": gate_type, \"amplitude\": drive_amp, \"frequency\": w01, \"phase\": 0.0}]\n", " \n", " res = g_eng.simulate_n_qubit_dynamics(\n", " [\"Q1\"], f\"Calibrated_{gate_type}\", duration, [], drives, \"0\", steps=50\n", " )\n", " \n", " times, p0, p1 = res[\"times\"], res[\"populations\"][\"0\"], res[\"populations\"][\"1\"]\n", " p_leak = 1.0 - np.array(p0) - np.array(p1)\n", " \n", " print(\"\\n Time (ns) | P(|0>) | P(|1>) | P(|2>) (Leakage)\")\n", " print(\" ----------------------------------------------\")\n", " for i in range(0, len(times), 10):\n", " print(f\" {times[i]:9.2f} | {p0[i]:.3f} | {p1[i]:.3f} | {p_leak[i]:.6f}\")\n", " print(f\" {times[-1]:9.2f} | {p0[-1]:.3f} | {p1[-1]:.3f} | {p_leak[-1]:.6f}\\n\")\n", " \n", " TerminalPlotter.plot_time_evolution(\n", " times=times,\n", " expectations=[p0, p1, p_leak],\n", " labels=['P(|0>)', 'P(|1>)', 'P(|2>) (Leakage)'],\n", " title=f\"Automated Single Qubit {gate_type}-Gate | Duration: {duration:.2f} ns\"\n", " )\n", "\n", "def main():\n", " print(\"============================================================\")\n", " print(\" Example 14: Single Qubit Gate (X & H) Automated Calibration\")\n", " print(\"============================================================\")\n", " \n", " q_eng = QubitEngine()\n", " g_eng = GateEngine()\n", "\n", " q_eng.create_qubit(\"transmon\", \"Q1\", {\"EJ\": 15.0, \"EC\": 0.3, \"truncated_dim\": 3})\n", " \n", " qubit = q_eng.get_qubit(\"Q1\")\n", " evals = qubit.eigensys(evals_count=2)[0]\n", " w01 = evals[1] - evals[0]\n", " \n", " drive_amp = 0.02 \n", " print(f\"\\n[CALIBRATION]: Finding optimal durations for Amp = {drive_amp} GHz...\")\n", "\n", " best_x_dur, x_metric = g_eng.calibrate_gate(\n", " q1_name=\"Q1\", gate_type=\"X\", parameter=\"duration\", amplitude=drive_amp\n", " )\n", " print(f\" -> Calibrated X-Pulse Duration: {best_x_dur:.2f} ns (Fidelity: {x_metric:.4f})\")\n", "\n", " best_h_dur, h_metric = g_eng.calibrate_gate(\n", " q1_name=\"Q1\", gate_type=\"H\", parameter=\"duration\", amplitude=drive_amp\n", " )\n", " print(f\" -> Calibrated H-Pulse Duration: {best_h_dur:.2f} ns (Fidelity: {h_metric:.4f})\")\n", "\n", " # Execute simulation and plotting for both gates\n", " simulate_and_plot(g_eng, \"X\", best_x_dur, drive_amp, w01)\n", " simulate_and_plot(g_eng, \"H\", best_h_dur, drive_amp, w01)\n", "\n", "if __name__ == \"__main__\":\n", " main()" ] }, { "cell_type": "code", "execution_count": 3, "id": "ee1689c5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "=== qforge Gate Simulation Example ===\n", "\n", "-> Creating Transmon...\n", "-> Computing Spectrum...\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mEnergy Spectrum (Relative)\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m┌┬─────────────────┬──────────────────┬─────────────────┬─────────────────┬┐\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m20.4┼\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m▞▞\u001b[0m\u001b[48;5;0m\u001b[38;5;3m Energy Levels ┼──────────────────┼─────────────────┼─────────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m17.0┼┼─────────────────┼──────────────────┼─────────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m13.6┼┼─────────────────┼──────────────────┼────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m10.2┼┼─────────────────┼───────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┼─────────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m 6.8┼┼─────────────────┼───\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───────────┼─────────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m 3.4┼┼─────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┼──────────────────┼─────────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m 0.0┼\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m─────────────┼──────────────────┼─────────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m└┼─────────────────┼──────────────────┼─────────────────┼─────────────────┼┘\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m0\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m1\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m2\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m3\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m4\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3mEnergy (GHz)\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mLevel Index\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\n", "-> Simulating X Gate (Pi-pulse)...\n", "-> Plotting Dynamics...\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mRabi Oscillation (X Gate)\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m┌┬─────────────────┬──────────────────┬─────────────────┬─────────────────┬┐\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m1.00┼\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m |0⟩ \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••••••••••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───────────────┼──────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••••••••••••••••••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m |1⟩ \u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;54m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m |2⟩ \u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.83┼┼─────────────────┼──────────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────┼─────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.67┼┼─────────────────┼─────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───┼──\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m─────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.50┼┼─────────────────┼─────────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m─────────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.33┼┼─────────────────┼─────────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m───┼──\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m─────────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.17┼┼─────────────────┼──────────\u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────┼─────\u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m──────────┼─────────────────┼┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;22m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;4m•••••\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m│\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m││\u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3m0.00┼\u001b[0m\u001b[48;5;0m\u001b[38;5;54m••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••\u001b[0m\u001b[48;5;0m\u001b[38;5;3m┤\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m└┼─────────────────┼──────────────────┼─────────────────┼─────────────────┼┘\u001b[0m\n", "\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m0\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m10\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m20\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m30\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3m40\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\u001b[48;5;0m\u001b[38;5;3mExpectation Value\u001b[0m\u001b[48;5;0m \u001b[0m\u001b[48;5;0m\u001b[38;5;3mTime (ns)\u001b[0m\u001b[48;5;0m \u001b[0m\n", "\n", "=== Simulation Complete ===\n" ] } ], "source": [ "\"\"\"\n", "Gate Simulation Example\n", "=======================\n", "\n", "This example demonstrates how to use the qforge API to:\n", "1. Create a Transmon qubit.\n", "2. Analyze its energy spectrum.\n", "3. Simulate a quantum gate (X-gate / Pi-pulse).\n", "4. Visualize the dynamics directly in the terminal.\n", "\"\"\"\n", "\n", "def run_simulation():\n", " print(\"\\n=== qforge Gate Simulation Example ===\\n\")\n", "\n", " # 1. Initialize Engines\n", " qubit_engine = QubitEngine()\n", "\n", " # 2. Create a Transmon Qubit\n", " print(\"-> Creating Transmon...\")\n", " qubit = qubit_engine.create_qubit(\n", " qubit_type=\"transmon\",\n", " name=\"example_qubit\",\n", " params={\"EJ\": 15.0, \"EC\": 0.3}\n", " )\n", "\n", " # 3. Compute and Plot Spectrum\n", " print(\"-> Computing Spectrum...\")\n", " spectrum = qubit_engine.compute_spectrum(qubit, n_levels=5, subtract_ground=True)\n", " TerminalPlotter.plot_spectrum(spectrum, title=\"Energy Spectrum (Relative)\")\n", "\n", " # 4. Simulate X Gate (Pi Pulse)\n", " print(\"\\n-> Simulating X Gate (Pi-pulse)...\")\n", " gate_engine = GateEngine()\n", " \n", " duration = 40.0 # ns\n", " \n", " result = gate_engine.simulate_dynamics(\n", " qubit_name=\"example_qubit\",\n", " gate_type=\"X\",\n", " duration=duration,\n", " noise_model=\"realistic\",\n", " steps=100\n", " )\n", "\n", " # 5. Visualize Dynamics\n", " print(\"-> Plotting Dynamics...\")\n", " TerminalPlotter.plot_time_evolution(\n", " times=result[\"times\"],\n", " expectations=result[\"expectations\"],\n", " labels=result[\"labels\"],\n", " title=\"Rabi Oscillation (X Gate)\"\n", " )\n", " \n", " print(\"\\n=== Simulation Complete ===\")\n", "\n", "if __name__ == \"__main__\":\n", " run_simulation()\n" ] } ], "metadata": { "kernelspec": { "display_name": "qforge_env", "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.14.3" } }, "nbformat": 4, "nbformat_minor": 5 }