{
 "nbformat": 4,
 "nbformat_minor": 0,
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "name": "python3",
   "display_name": "Python 3"
  },
  "language_info": {
   "name": "python"
  }
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0Rz2nKVBS0dl"
   },
   "source": "# 🌌 QRAM: Smart Quantum Skin (SQS) — Multi-Backend Edition\n\n**Erişim haritası (2026):**\n\n| Modül | Problem | Backend | Paradigma |\n|-------|---------|---------|-----------|\n| **A** | RAM molekülü Ground State | **IBM Condor-sınıfı** | Digital VQE (EstimatorV2 + Session) |\n| **B** | Kafes / Hubbard / Band-gap & emilim | **QuEra Aquila** | Analog Hamiltonian Simulation (AHS) |\n| **C** | Kafes parametre / yapı optimizasyonu | **D-Wave** | Quantum Annealing (QUBO/BQM) |\n\nBu notebook, mevcut erişimlerinize göre tasarlanmıştır."
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "ZHpOmUNDS0dr"
   },
   "source": "## 0. Kurulum"
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "YiDFgqltS0ds",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786594163506,
     "user_tz": -180,
     "elapsed": 56058,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "0868ad4d-6c70-4faf-97be-5f27c52d94ad"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.7/9.7 MB\u001b[0m \u001b[31m60.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m65.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.4/12.4 MB\u001b[0m \u001b[31m71.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m412.6/412.6 kB\u001b[0m \u001b[31m27.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m120.7/120.7 kB\u001b[0m \u001b[31m9.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m94.7/94.7 kB\u001b[0m \u001b[31m4.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m67.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m224.2/224.2 kB\u001b[0m \u001b[31m12.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.5/54.5 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m76.6/76.6 kB\u001b[0m \u001b[31m5.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m7.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m541.5/541.5 kB\u001b[0m \u001b[31m33.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m402.1/402.1 kB\u001b[0m \u001b[31m9.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m247.0/247.0 kB\u001b[0m \u001b[31m19.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m144.5/144.5 kB\u001b[0m \u001b[31m11.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m153.2/153.2 kB\u001b[0m \u001b[31m12.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m140.0/140.0 kB\u001b[0m \u001b[31m11.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m537.8/537.8 kB\u001b[0m \u001b[31m36.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m196.1/196.1 kB\u001b[0m \u001b[31m15.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m15.6/15.6 MB\u001b[0m \u001b[31m88.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m90.2/90.2 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
      "dask 2026.7.0 requires cloudpickle>=3.0.0, but you have cloudpickle 2.2.1 which is incompatible.\n",
      "omegaconf 2.3.1 requires antlr4-python3-runtime==4.9.*, but you have antlr4-python3-runtime 4.13.2 which is incompatible.\u001b[0m\u001b[31m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.7/8.7 MB\u001b[0m \u001b[31m65.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m170.2/170.2 kB\u001b[0m \u001b[31m12.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m65.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m95.9/95.9 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m78.5/78.5 kB\u001b[0m \u001b[31m4.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m106.8/106.8 kB\u001b[0m \u001b[31m8.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m15.0/15.0 MB\u001b[0m \u001b[31m82.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m83.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.5/2.5 MB\u001b[0m \u001b[31m76.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m120.8/120.8 kB\u001b[0m \u001b[31m9.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.0/4.0 MB\u001b[0m \u001b[31m95.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m45.5/45.5 kB\u001b[0m \u001b[31m3.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m137.5/137.5 kB\u001b[0m \u001b[31m4.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[?25h✅ Temel kütüphaneler hazır.\n"
     ]
    }
   ],
   "source": "# Temel + platform paketleri\n!pip install -q qiskit qiskit-ibm-runtime qiskit-aer\n!pip install -q amazon-braket-sdk\n!pip install -q dwave-ocean-sdk\n!pip install -q scipy matplotlib numpy pylatexenc\n\nimport numpy as np\nimport matplotlib.pyplot as plt\nfrom scipy.optimize import minimize\nfrom scipy.linalg import eigh\n\nprint(\"✅ Temel kütüphaneler hazır.\")"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "DUarjIwQS0dv"
   },
   "source": "## 1. Kimlik Doğrulama (API Key / Token)\n\nAşağıdaki hücrede token’larınızı girin. Colab Secrets kullanıyorsanız `userdata.get` ile de çekebilirsiniz."
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "sgAVRi03S0dv",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1786594406767,
     "user_tz": -180,
     "elapsed": 243113,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "d652d7bf-b7fb-4bfb-a47f-6787e15003df"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "IBM Quantum API Token (boş bırakırsanız kayıtlı hesap kullanılır): ··········\n",
      "D-Wave Leap API Token (boş bırakırsanız dwave-config kullanılır): ··········\n",
      "🔑 Kimlik bilgileri alındı (boş bırakılanlar kayıtlı/ortam config’ine düşer).\n"
     ]
    }
   ],
   "source": "from getpass import getpass\nimport os\n\n# ---------- IBM Quantum ----------\nIBM_TOKEN = getpass(\"IBM Quantum API Token (boş bırakırsanız kayıtlı hesap kullanılır): \") or None\n\n# ---------- AWS (QuEra Aquila için Braket) ----------\n# Alternatif: AWS CLI / ortam değişkenleri / IAM role\nos.environ.setdefault(\"AWS_DEFAULT_REGION\", \"us-east-1\")\n# AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY zaten ortamda varsa dokunmayın\n\n# ---------- D-Wave Leap ----------\nDWAVE_TOKEN = getpass(\"D-Wave Leap API Token (boş bırakırsanız dwave-config kullanılır): \") or None\nif DWAVE_TOKEN:\n    os.environ[\"DWAVE_API_TOKEN\"] = DWAVE_TOKEN\n\nprint(\"🔑 Kimlik bilgileri alındı (boş bırakılanlar kayıtlı/ortam config’ine düşer).\")"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "yItWGDLNS0dw"
   },
   "source": "## 2. Backend Bağlantıları"
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 350
    },
    "id": "ZH7vDWU_S0dx",
    "executionInfo": {
     "status": "error",
     "timestamp": 1786594409857,
     "user_tz": -180,
     "elapsed": 3103,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "ab07041f-9bad-4c68-ef21-e331d3535b10"
   },
   "outputs": [
    {
     "output_type": "error",
     "ename": "AccountNotFoundError",
     "evalue": "\"Unable to find account. Please make sure an account with the channel name 'ibm_quantum_platform' is saved.\"",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAccountNotFoundError\u001b[0m                      Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_620/814392218.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      8\u001b[0m     \u001b[0mQiskitRuntimeService\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave_account\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtoken\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mIBM_TOKEN\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moverwrite\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mset_as_default\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mibm_service\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mQiskitRuntimeService\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     11\u001b[0m \u001b[0;31m# Condor-sınıfı veya en büyük / en az meşgul gerçek cihaz\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m ibm_backend = ibm_service.least_busy(\n",
      "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/qiskit_ibm_runtime/qiskit_runtime_service.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, channel, token, url, filename, name, instance, proxies, verify, private_endpoint, url_resolver, region, plans_preference, tags)\u001b[0m\n\u001b[1;32m    225\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_instance_auto\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    226\u001b[0m             \u001b[0minstance\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 227\u001b[0;31m         self._account = self._discover_account(\n\u001b[0m\u001b[1;32m    228\u001b[0m             \u001b[0mtoken\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtoken\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    229\u001b[0m             \u001b[0murl\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/qiskit_ibm_runtime/qiskit_runtime_service.py\u001b[0m in \u001b[0;36m_discover_account\u001b[0;34m(self, token, url, instance, channel, filename, name, proxies, verify)\u001b[0m\n\u001b[1;32m    466\u001b[0m         \u001b[0;31m# channel is not defined yet, get it from the AccountManager\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    467\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0maccount\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 468\u001b[0;31m             \u001b[0maccount\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mAccountManager\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    469\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0minstance\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    470\u001b[0m             \u001b[0maccount\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minstance\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minstance\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.12/dist-packages/qiskit_ibm_runtime/accounts/management.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(cls, filename, name, channel)\u001b[0m\n\u001b[1;32m    215\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mAccount\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_saved_format\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mall_config\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0maccount_name\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    216\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 217\u001b[0;31m         raise AccountNotFoundError(\n\u001b[0m\u001b[1;32m    218\u001b[0m             \u001b[0;34m\"Unable to find account. Please make sure an account with the channel name \"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    219\u001b[0m             \u001b[0;34mf\"'{channel_}' is saved.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAccountNotFoundError\u001b[0m: \"Unable to find account. Please make sure an account with the channel name 'ibm_quantum_platform' is saved.\""
     ]
    }
   ],
   "source": "# ===== IBM =====\nfrom qiskit_ibm_runtime import QiskitRuntimeService, Session, EstimatorV2 as Estimator\nfrom qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager\nfrom qiskit.circuit.library import efficient_su2\nfrom qiskit.quantum_info import SparsePauliOp\n\nif IBM_TOKEN:\n    QiskitRuntimeService.save_account(token=IBM_TOKEN, overwrite=True, set_as_default=True)\n\nibm_service = QiskitRuntimeService()\n# Condor-sınıfı veya en büyük / en az meşgul gerçek cihaz\nibm_backend = ibm_service.least_busy(\n    operational=True,\n    simulator=False,\n    min_num_qubits=100   # Condor / Heron sınıfı için eşiği yükseltebilirsiniz\n)\nprint(f\"IBM Backend: {ibm_backend.name}  |  qubits: {ibm_backend.num_qubits}\")\n\n# ===== QuEra (Braket) =====\nfrom braket.aws import AwsDevice\nfrom braket.devices import LocalSimulator\nfrom braket.ahs.atom_arrangement import AtomArrangement\nfrom braket.ahs.analog_hamiltonian_simulation import AnalogHamiltonianSimulation\nfrom braket.ahs.driving_field import DrivingField\nfrom braket.timings.time_series import TimeSeries\n\nAQUILA_ARN = \"arn:aws:braket:us-east-1::device/qpu/quera/Aquila\"\ntry:\n    aquila = AwsDevice(AQUILA_ARN)\n    print(f\"QuEra Aquila: {aquila.name}  |  status: {aquila.status}\")\nexcept Exception as e:\n    aquila = None\n    print(f\"⚠️ Aquila bağlanamadı ({e}). Yerel AHS simülatörü kullanılacak.\")\n\nahs_local = LocalSimulator(\"braket_ahs\")\n\n# ===== D-Wave =====\nfrom dwave.system import DWaveSampler, EmbeddingComposite\nfrom dimod import BinaryQuadraticModel\n\ntry:\n    dwave_sampler = EmbeddingComposite(DWaveSampler())\n    print(f\"D-Wave: {dwave_sampler.child.properties.get('chip_id', 'connected')}\")\nexcept Exception as e:\n    dwave_sampler = None\n    print(f\"⚠️ D-Wave bağlanamadı ({e}). ExactSolver fallback kullanılabilir.\")"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "KJopEp4_S0dy"
   },
   "source": "---\n## MODÜL A — IBM Condor: RAM Molekülü Ground State (VQE)\n\nBasitleştirilmiş 2-qubit RAM Hamiltoniyeni üzerinde VQE.  \nSession kullanılarak kuyruk gecikmesi minimize edilir."
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 224
    },
    "id": "SoaRrGvXS0dy",
    "executionInfo": {
     "status": "error",
     "timestamp": 1786594441624,
     "user_tz": -180,
     "elapsed": 30,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "0abfa59c-80b1-4c40-f453-5a64b37bd752"
   },
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "IBM Condor-sınıfı VQE başlatılıyor...\n"
     ]
    },
    {
     "output_type": "error",
     "ename": "NameError",
     "evalue": "name 'ibm_backend' is not defined",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_620/1122805437.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     14\u001b[0m \u001b[0;31m# 3. Transpile → ISA\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mpm\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerate_preset_pass_manager\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbackend\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mibm_backend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moptimization_level\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     16\u001b[0m \u001b[0misa_ansatz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mansatz\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     17\u001b[0m \u001b[0misa_h\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mram_h\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_layout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0misa_ansatz\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'ibm_backend' is not defined"
     ]
    }
   ],
   "source": "print(\"IBM Condor-sınıfı VQE başlatılıyor...\")\n\n# 1. Hamiltoniyen (örnek RAM polimer modeli)\nram_h = SparsePauliOp.from_list([\n    (\"ZZ\", -1.0523),\n    (\"ZI\",  0.3979),\n    (\"IZ\", -0.3979),\n    (\"XX\",  0.1809),\n])\n\n# 2. Ansatz\nansatz = efficient_su2(num_qubits=ram_h.num_qubits, reps=2, entanglement=\"linear\")\n\n# 3. Transpile → ISA\npm = generate_preset_pass_manager(backend=ibm_backend, optimization_level=1)\nisa_ansatz = pm.run(ansatz)\nisa_h = ram_h.apply_layout(isa_ansatz.layout)\n\n# 4. VQE cost + Session\nenergy_history = []\n\ndef vqe_cost(params, estimator):\n    job = estimator.run([(isa_ansatz, isa_h, [params])])\n    energy = float(job.result()[0].data.evs)\n    energy_history.append(energy)\n    return energy\n\nx0 = np.random.uniform(-np.pi, np.pi, isa_ansatz.num_parameters)\n\n# Gerçek donanım (Session) — Open Plan’da Session kısıtlı olabilir → job mode’a düşebilirsiniz\nUSE_SESSION = True   # False yaparsanız her çağrı ayrı job olur\n\nif USE_SESSION:\n    with Session(backend=ibm_backend) as session:\n        estimator = Estimator(mode=session)\n        estimator.options.default_shots = 4096\n        result = minimize(\n            vqe_cost, x0, args=(estimator,),\n            method=\"COBYLA\", options={\"maxiter\": 40}   # donanım için düşük tutun\n        )\nelse:\n    estimator = Estimator(mode=ibm_backend)\n    estimator.options.default_shots = 4096\n    result = minimize(\n        vqe_cost, x0, args=(estimator,),\n        method=\"COBYLA\", options={\"maxiter\": 40}\n    )\n\nprint(f\"✅ VQE tamamlandı\")\nprint(f\"⚡ Ground State Energy: {result.fun:.6f} Hartree\")\nprint(f\"   nfev = {result.nfev}\")\n\nplt.figure(figsize=(8, 4))\nplt.plot(energy_history, color=\"purple\", lw=2)\nplt.title(\"IBM VQE — RAM Molekülü Enerji Minimizasyonu\")\nplt.xlabel(\"İterasyon\")\nplt.ylabel(\"Enerji (Hartree)\")\nplt.grid(True, ls=\":\", alpha=0.6)\nplt.show()"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CS5h0w0FS0dz"
   },
   "source": "---\n## MODÜL B — QuEra Aquila: Analog Kafes / Hubbard-benzeri Simülasyon\n\nRydberg atom dizisi ile kafes benzeri etkileşim simüle edilir.  \nBand-gap / yalıtkan karakter için ordered phase (ör. Z₂ antiferromagnet) aranır.\n\n> Not: Gerçek Hubbard modelini birebir map etmek ileri seviye local-detuning + custom schedule gerektirir.  \n> Burada Aquila’nın doğal Rydberg Hamiltoniyeni ile **kafes kararlılığı / ordered phase** proxy’si kullanılır."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "jWJg-6HWS0d0",
    "executionInfo": {
     "status": "aborted",
     "timestamp": 1786594410039,
     "user_tz": -180,
     "elapsed": 303081,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    }
   },
   "outputs": [],
   "source": "print(\"QuEra Aquila (Analog) kafes simülasyonu hazırlanıyor...\")\n\n# --- 1. Atom kaydı (2D kare kafes örneği) ---\na = 5.5e-6          # atom aralığı (metre) — Rydberg blockade yarıçapına göre ayarlanır\nn_rows, n_cols = 4, 4   # 16 atom (Aquila 256’ya kadar çıkabilir)\n\nregister = AtomArrangement()\nfor i in range(n_rows):\n    for j in range(n_cols):\n        register.add([j * a, i * a])\n\nprint(f\"Kayıt: {len(register)} atom, a = {a*1e6:.2f} µm\")\n\n# --- 2. Driving field (zaman serisi) ---\n# Basit bir sweep: amplitude yükselir, detuning negatiften pozitife geçer → ordered phase\nomega_max = 15.8e6   # rad/s\ndelta_start, delta_end = -20e6, 30e6\nt_total = 4e-6       # 4 µs\n\ntime_points = [0, 0.1*t_total, 0.9*t_total, t_total]\n\namplitude = TimeSeries()\nfor t, val in zip(time_points, [0, omega_max, omega_max, 0]):\n    amplitude.put(t, val)\n\ndetuning = TimeSeries()\nfor t, val in zip(time_points, [delta_start, delta_start, delta_end, delta_end]):\n    detuning.put(t, val)\n\nphase = TimeSeries().put(0, 0).put(t_total, 0)   # sabit faz\n\ndrive = DrivingField(amplitude=amplitude, phase=phase, detuning=detuning)\n\n# --- 3. AHS programı ---\nahs_program = AnalogHamiltonianSimulation(register=register, hamiltonian=drive)\n\n# --- 4. Çalıştır (önce yerel, sonra opsiyonel Aquila) ---\nRUN_ON_AQUILA = False   # True yapın + AWS kredisi hazır olsun\n\nif RUN_ON_AQUILA and aquila is not None:\n    discrete = ahs_program.discretize(aquila)\n    task = aquila.run(discrete, shots=100)\n    print(f\"Aquila task ARN: {task.id}\")\n    result_ahs = task.result()\nelse:\n    print(\"Yerel AHS simülatörü çalışıyor...\")\n    task = ahs_local.run(ahs_program, shots=100)\n    result_ahs = task.result()\n\n# --- 5. Basit analiz: Rydberg occupancy ---\ndef rydberg_density(result):\n    \"\"\"Ortalama Rydberg (excited) occupancy.\"\"\"\n    measurements = result.measurements\n    # her shot için bitstring → 1 = Rydberg\n    densities = []\n    for m in measurements:\n        # pre_sequence / post_sequence formatına göre uyarlayın\n        post = m.post_sequence if hasattr(m, \"post_sequence\") else m\n        densities.append(np.mean(post))\n    return float(np.mean(densities))\n\ntry:\n    dens = rydberg_density(result_ahs)\n    print(f\"✅ Ortalama Rydberg yoğunluğu: {dens:.3f}\")\n    if 0.3 < dens < 0.7:\n        print(\"🟢 Ordered / checkerboard-benzeri faz sinyali → kafes kararlılığı iyi proxy\")\n    else:\n        print(\"🟡 Yoğunluk uç değerde — parametre (a, Δ, Ω) ayarlanmalı\")\nexcept Exception as e:\n    print(f\"Analiz atlandı: {e}\")\n    print(\"result_ahs objesini inceleyerek kendi analiz fonksiyonunuzu yazın.\")"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "wckgJL77S0d1"
   },
   "source": "---\n## MODÜL C — D-Wave: Kafes Parametre / Yapı Optimizasyonu (QUBO)\n\nÖrnek: Metamalzeme kafesinde hangi sitelerin “aktif emici” olacağını  \nbinary değişkenlerle seçerek emilim-benzeri bir maliyeti minimize et.\n\n(Gerçek fizik modeli yerine demonstrasyon QUBO’su)"
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "_SKvQ7d-S0d1",
    "executionInfo": {
     "status": "aborted",
     "timestamp": 1786594410045,
     "user_tz": -180,
     "elapsed": 303046,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    }
   },
   "outputs": [],
   "source": "print(\"D-Wave QUBO optimizasyonu başlatılıyor...\")\n\n# Basit örnek: N site’li 1D zincirde “emici” yerleştirme\n# Amaç: komşu emiciler cezalandırılsın (interference), toplam emici sayısı hedefe yakın olsun\nN = 12\ntarget_absorbers = 4\npenalty_neighbor = 2.0\npenalty_count = 1.5\n\nbqm = BinaryQuadraticModel(\"BINARY\")\n\n# Değişkenler: x_i = 1 → site i emici\nfor i in range(N):\n    bqm.add_variable(i, -penalty_count)          # emici olmaya teşvik (hedefe göre ayarlanır)\n\n# Komşu cezası\nfor i in range(N - 1):\n    bqm.add_interaction(i, i + 1, penalty_neighbor)\n\n# Toplam emici sayısını hedefe yaklaştır (basit soft constraint)\n# (x_0 + ... + x_{N-1} - target)² genişletmesi\nfor i in range(N):\n    bqm.add_linear(i, penalty_count * (1 - 2 * target_absorbers / N))\nfor i in range(N):\n    for j in range(i + 1, N):\n        bqm.add_interaction(i, j, 2 * penalty_count / N)\n\nif dwave_sampler is not None:\n    sampleset = dwave_sampler.sample(bqm, num_reads=200, label=\"QRAM-SQS-lattice-opt\")\n    best = sampleset.first\n    print(f\"✅ En iyi enerji: {best.energy:.3f}\")\n    print(f\"   Konfigürasyon: {list(best.sample.values())}\")\n    print(f\"   Emici sayısı : {sum(best.sample.values())}\")\nelse:\n    from dimod import ExactSolver\n    sampleset = ExactSolver().sample(bqm)\n    best = sampleset.first\n    print(f\"(ExactSolver) Enerji: {best.energy:.3f}  |  {list(best.sample.values())}\")"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "yc7TDYOIS0d2"
   },
   "source": "---\n## 3. Klasik Karşılaştırma (Band-gap referansı)\n\nOrijinal notebook’taki tight-binding hesabı referans olarak kalır."
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "qBV5CI5nS0d2",
    "executionInfo": {
     "status": "aborted",
     "timestamp": 1786594410316,
     "user_tz": -180,
     "elapsed": 303314,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    }
   },
   "outputs": [],
   "source": "N_sites = 20\nt, U = 1.0, 2.5\n\nH = np.zeros((N_sites, N_sites))\nfor i in range(N_sites):\n    if i > 0: H[i, i-1] = -t\n    if i < N_sites-1: H[i, i+1] = -t\n    H[i, i] = (U/2) * (-1)**i\n\nenergies, _ = eigh(H)\nfermi = N_sites // 2\nband_gap = energies[fermi] - energies[fermi-1]\n\nprint(f\"Klasik Band Gap: {band_gap:.4f} eV\")\nif band_gap > 0.5:\n    print(\"🟢 Yalıtkan/yarı-iletken → emilim stabilitesi yüksek (referans)\")\nelse:\n    print(\"🔴 Metalik karakter riski\")\n\nplt.figure(figsize=(9, 4))\nplt.plot(energies, \"o-\", color=\"teal\", ms=5)\nplt.axhspan(energies[fermi-1], energies[fermi], color=\"red\", alpha=0.2,\n            label=f\"Band Gap = {band_gap:.2f} eV\")\nplt.title(\"Klasik Tight-Binding Band Yapısı (Referans)\")\nplt.xlabel(\"Öz-durum indeksi\")\nplt.ylabel(\"Enerji (eV)\")\nplt.legend()\nplt.grid(True, ls=\"--\", alpha=0.5)\nplt.show()"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "LnK9-05lS0d3"
   },
   "source": "---\n## Özet & Sonraki Adımlar\n\n| Modül | Backend | Durum | Geliştirme önerisi |\n|-------|---------|-------|--------------------|\n| A – VQE | IBM | Çalışır | Daha gerçekçi molekül Hamiltoniyeni (PySCF → qubit mapping) |\n| B – Analog kafes | QuEra Aquila | Çalışır (local + QPU) | Local detuning ile daha iyi Hubbard map’i |\n| C – Optimizasyon | D-Wave | Çalışır | Gerçek emilim/geometri maliyet fonksiyonu |\n\n**Güvenlik notu:** Token’ları notebook’a hard-code etmeyin. Colab Secrets veya ortam değişkeni kullanın.\n\n**Maliyet:** Aquila ve IBM Session job’ları ücretlidir. Önce local / simulator ile doğrulayın."
  }
 ]
}