{
 "nbformat": 4,
 "nbformat_minor": 5,
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.12.0"
  },
  "colab": {
   "provenance": []
  }
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "CW-EcKLJNxN4"
   },
   "source": "# Quantum Application Development Pipeline\n\n**Veri Tipi → Cihaz Seçimi → Qubit Bütçesi → Otomatik Encoding → Circuit**\n\nBu notebook, kuantum uygulama geliştirme sürecinde klasik veriyi (CSV, Resim, Video, Geospatial) otomatik olarak kuantum durumlarına encode eden bir engine içerir.\n\n### Desteklenen Veri Tipleri\n- **CSV / Tabular**\n- **Image** (PNG, JPG, TIFF...)\n- **Video** (frame extraction)\n- **Geospatial** (GeoTIFF, lat-lon CSV)\n\n### Desteklenen Cihazlar (2026)\n| Kategori | Cihaz | Tip | Max Qubit |\n|----------|-------|-----|-----------|\n| Simulator | Aer / Local High-Qubit | Gate | 32–40 |\n| Superconducting | IBM Brisbane / Kyiv | Gate | 127 |\n| Superconducting | **Origin Wukong-180** | Gate | 180 |\n| Trapped-Ion | IonQ Aria / Quantinuum H1 | Gate | 20–25 |\n| **Cold Atom** | QuEra Aquila / Gemini | Analog / Gate | 256 |\n| **Photonic** | Xanadu Aurora / Quandela Belenos | Photonic / CV | 12–35+ |\n| **Adiabatic** | D-Wave Advantage2 | Annealing | 4400+ |\n\n> **Not:** D-Wave (annealing), QuEra Aquila (analog) ve bazı photonic cihazlar standart gate-model circuit yerine farklı encoding (QUBO, Hamiltonian, continuous-variable) gerektirir. Pipeline bunları listeler ve uygun uyarı verir.\n\n---",
   "id": "CW-EcKLJNxN4"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "4cH0xkQ6NxN7"
   },
   "source": "## 1. Kurulum (Colab – En Güncel Qiskit 2.5.x)",
   "id": "4cH0xkQ6NxN7"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "bcQY36BkNxN9",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788773682929,
     "user_tz": -180,
     "elapsed": 62161,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "0e2f9a50-d421-4876-d836-b5cc6ae1dabb"
   },
   "source": "# En güncel Qiskit 2.5.x + gerekli paketler\n!pip install -U qiskit qiskit-aer qiskit-ibm-runtime numpy pandas scikit-learn pillow opencv-python-headless matplotlib -q\n\n# Opsiyonel (geospatial)\n# !pip install rasterio geopandas -q\n\nimport qiskit\nprint(f\"Qiskit versiyonu : {qiskit.__version__}\")\nprint(\"Kurulum tamamlandı!\")",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.5/79.5 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m80.3/80.3 kB\u001b[0m \u001b[31m2.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.8/9.8 MB\u001b[0m \u001b[31m45.6 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[31m32.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[31m43.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.7/16.7 MB\u001b[0m \u001b[31m47.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.9/10.9 MB\u001b[0m \u001b[31m27.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.1/9.1 MB\u001b[0m \u001b[31m103.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.9/6.9 MB\u001b[0m \u001b[31m97.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.0/10.0 MB\u001b[0m \u001b[31m92.9 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[31m28.7 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[31m11.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m95.7/95.7 kB\u001b[0m \u001b[31m8.8 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[31m77.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m234.2/234.2 kB\u001b[0m \u001b[31m16.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.9/54.9 kB\u001b[0m \u001b[31m4.5 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[31m7.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[31m10.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[31m38.0 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",
      "google-colab 1.0.0 requires pandas==2.2.3, but you have pandas 3.0.5 which is incompatible.\n",
      "numba 0.61.2 requires numpy<2.3,>=1.24, but you have numpy 2.5.3 which is incompatible.\u001b[0m\u001b[31m\n",
      "\u001b[0mQiskit versiyonu : 2.5.2\n",
      "Kurulum tamamlandı!\n"
     ]
    }
   ],
   "execution_count": null,
   "id": "bcQY36BkNxN9"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "U2_wtANkNxN_"
   },
   "source": "## 2. Pipeline Sınıfı (Ana Engine – 2026 Güncel)",
   "id": "U2_wtANkNxN_"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 507
    },
    "id": "hzIsLAdbNxOA",
    "executionInfo": {
     "status": "error",
     "timestamp": 1788773683773,
     "user_tz": -180,
     "elapsed": 643,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "597b718c-c750-45d3-9808-341987aac3c4"
   },
   "source": "from typing import Union, List, Dict, Optional, Tuple, Any\nimport numpy as np\nimport warnings\nfrom pathlib import Path\n\nfrom qiskit import QuantumCircuit\nfrom qiskit.circuit.library import ZZFeatureMap, ZFeatureMap, PauliFeatureMap\nfrom qiskit.quantum_info import Statevector\n\nfrom sklearn.preprocessing import MinMaxScaler, StandardScaler\nfrom sklearn.decomposition import PCA\n\n# ============================================================\n# CİHAZ KATALOĞU (2026 – Güncel)\n# ============================================================\nDEVICE_CATALOG = {\n    # --- Simulators ---\n    \"simulator\": {\n        \"name\": \"Aer Simulator (local)\",\n        \"max_qubits\": 32,\n        \"type\": \"simulator\",\n        \"paradigm\": \"gate\",\n        \"noise\": False,\n        \"provider\": \"qiskit\",\n        \"note\": \"Standart gate-model simülasyon\"\n    },\n    \"local_high_qubit\": {\n        \"name\": \"Local High-Qubit Simulator\",\n        \"max_qubits\": 40,\n        \"type\": \"simulator\",\n        \"paradigm\": \"gate\",\n        \"noise\": False,\n        \"provider\": \"local\",\n        \"note\": \"Yüksek qubit simülasyon (bellek yoğun)\"\n    },\n\n    # --- Superconducting Gate-model ---\n    \"ibm_brisbane\": {\n        \"name\": \"IBM Brisbane\",\n        \"max_qubits\": 127,\n        \"type\": \"superconducting\",\n        \"paradigm\": \"gate\",\n        \"noise\": True,\n        \"provider\": \"ibm\",\n        \"note\": \"IBM Quantum Compute Service\"\n    },\n    \"ibm_kyiv\": {\n        \"name\": \"IBM Kyiv\",\n        \"max_qubits\": 127,\n        \"type\": \"superconducting\",\n        \"paradigm\": \"gate\",\n        \"noise\": True,\n        \"provider\": \"ibm\",\n        \"note\": \"IBM Quantum Compute Service\"\n    },\n    \"wukong\": {\n        \"name\": \"Origin Wukong-180\",\n        \"max_qubits\": 180,\n        \"type\": \"superconducting\",\n        \"paradigm\": \"gate\",\n        \"noise\": True,\n        \"provider\": \"origin_quantum\",\n        \"note\": \"Çin Origin Quantum – 4. nesil, 180 qubit (2026)\"\n    },\n\n    # --- Trapped Ion ---\n    \"ionq_aria\": {\n        \"name\": \"IonQ Aria\",\n        \"max_qubits\": 25,\n        \"type\": \"trapped-ion\",\n        \"paradigm\": \"gate\",\n        \"noise\": True,\n        \"provider\": \"ionq\",\n        \"note\": \"Yüksek fidelity trapped-ion\"\n    },\n    \"quantinuum_h1\": {\n        \"name\": \"Quantinuum H1\",\n        \"max_qubits\": 20,\n        \"type\": \"trapped-ion\",\n        \"paradigm\": \"gate\",\n        \"noise\": True,\n        \"provider\": \"quantinuum\",\n        \"note\": \"Yüksek fidelity trapped-ion\"\n    },\n\n    # --- Cold Atom / Neutral Atom ---\n    \"quera_aquila\": {\n        \"name\": \"QuEra Aquila\",\n        \"max_qubits\": 256,\n        \"type\": \"cold-atom\",\n        \"paradigm\": \"analog\",\n        \"noise\": True,\n        \"provider\": \"quera\",\n        \"note\": \"Neutral-atom analog Hamiltonian simulator (Amazon Braket)\"\n    },\n    \"quera_gemini\": {\n        \"name\": \"QuEra Gemini\",\n        \"max_qubits\": 260,\n        \"type\": \"cold-atom\",\n        \"paradigm\": \"gate\",\n        \"noise\": True,\n        \"provider\": \"quera\",\n        \"note\": \"Gate-based + QEC testbed (2025+)\"\n    },\n\n    # --- Photonic ---\n    \"xanadu_aurora\": {\n        \"name\": \"Xanadu Aurora\",\n        \"max_qubits\": 35,\n        \"type\": \"photonic\",\n        \"paradigm\": \"continuous-variable\",\n        \"noise\": True,\n        \"provider\": \"xanadu\",\n        \"note\": \"Photonic continuous-variable (GKP). Gate-model değil.\"\n    },\n    \"quandela_belenos\": {\n        \"name\": \"Quandela Belenos\",\n        \"max_qubits\": 12,\n        \"type\": \"photonic\",\n        \"paradigm\": \"gate\",\n        \"noise\": True,\n        \"provider\": \"quandela\",\n        \"note\": \"Photonic single-photon source (2025)\"\n    },\n\n    # --- Adiabatic / Quantum Annealing ---\n    \"dwave_advantage2\": {\n        \"name\": \"D-Wave Advantage2\",\n        \"max_qubits\": 4400,\n        \"type\": \"adiabatic\",\n        \"paradigm\": \"annealing\",\n        \"noise\": True,\n        \"provider\": \"dwave\",\n        \"note\": \"Quantum Annealing – QUBO/Ising formulasyonu gerekir (gate-model değil)\"\n    }\n}\n\n\nclass QuantumAppPipeline:\n    \"\"\"\n    Quantum Application Development Pipeline (2026)\n\n    Adımlar:\n    1. Veri tipi seçimi + yükleme\n    2. Hedef cihaz seçimi\n    3. Qubit bütçesi + paradigm kontrolü\n    4. Otomatik encoding + circuit üretimi\n    \"\"\"\n\n    def __init__(self, random_seed: int = 42):\n        self.random_seed = random_seed\n        np.random.seed(random_seed)\n\n        self.data_type: Optional[str] = None\n        self.raw_data = None\n        self.processed_data: Optional[np.ndarray] = None\n        self.device_key: Optional[str] = None\n        self.device_info: Optional[Dict] = None\n        self.max_qubits: int = 10\n        self.recommended_qubits: int = 0\n        self.encoding_type: Optional[str] = None\n        self.feature_map = None\n        self.circuit: Optional[QuantumCircuit] = None\n        self.scaler = None\n        self.pca = None\n        self.history = []\n\n    # ==================================================================\n    # ADIM 1: Veri Tipi Seçimi + Yükleme\n    # ==================================================================\n    def select_data_type(self, data_type: str) -> \"QuantumAppPipeline\":\n        allowed = {\"csv\", \"image\", \"video\", \"geospatial\"}\n        data_type = data_type.lower().strip()\n        if data_type not in allowed:\n            raise ValueError(f\"Desteklenen veri tipleri: {allowed}\")\n        self.data_type = data_type\n        self._log(f\"Veri tipi seçildi: {data_type}\")\n        return self\n\n    def load_data(self, source: Union[str, np.ndarray, Any], **kwargs) -> \"QuantumAppPipeline\":\n        if self.data_type is None:\n            raise RuntimeError(\"Önce select_data_type() ile veri tipini seçmelisiniz.\")\n\n        if self.data_type == \"csv\":\n            self.processed_data = self._load_csv(source, **kwargs)\n        elif self.data_type == \"image\":\n            self.processed_data = self._load_image(source, **kwargs)\n        elif self.data_type == \"video\":\n            self.processed_data = self._load_video(source, **kwargs)\n        elif self.data_type == \"geospatial\":\n            self.processed_data = self._load_geospatial(source, **kwargs)\n\n        self._log(f\"Veri yüklendi. Şekil: {self.processed_data.shape}\")\n        return self\n\n    def _load_csv(self, source, target_column: Optional[str] = None,\n                  max_features: Optional[int] = None) -> np.ndarray:\n        import pandas as pd\n        if isinstance(source, (str, Path)):\n            df = pd.read_csv(source)\n        elif hasattr(source, \"values\"):\n            df = source\n        else:\n            df = pd.DataFrame(source)\n\n        if target_column and target_column in df.columns:\n            X = df.drop(columns=[target_column])\n        else:\n            X = df.select_dtypes(include=[np.number])\n\n        data = X.values.astype(np.float64)\n        if max_features and data.shape[1] > max_features:\n            data = data[:, :max_features]\n        return data\n\n    def _load_image(self, source, resize: Tuple[int, int] = (32, 32),\n                    grayscale: bool = True, flatten: bool = True) -> np.ndarray:\n        from PIL import Image\n\n        if isinstance(source, (str, Path)):\n            img = Image.open(source)\n        else:\n            img = source\n\n        if grayscale:\n            img = img.convert(\"L\")\n        else:\n            img = img.convert(\"RGB\")\n\n        img = img.resize(resize)\n        arr = np.array(img, dtype=np.float64) / 255.0\n\n        if flatten:\n            arr = arr.flatten().reshape(1, -1)\n        return arr\n\n    def _load_video(self, source, max_frames: int = 8,\n                    resize: Tuple[int, int] = (32, 32),\n                    grayscale: bool = True) -> np.ndarray:\n        import cv2\n\n        cap = cv2.VideoCapture(str(source))\n        frames = []\n        count = 0\n\n        while count < max_frames:\n            ret, frame = cap.read()\n            if not ret:\n                break\n            if grayscale:\n                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)\n            frame = cv2.resize(frame, resize)\n            frames.append(frame.astype(np.float64) / 255.0)\n            count += 1\n        cap.release()\n\n        if not frames:\n            raise ValueError(\"Videodan frame okunamadı.\")\n\n        return np.array(frames).flatten().reshape(1, -1)\n\n    def _load_geospatial(self, source, band: int = 1,\n                         resize: Optional[Tuple[int, int]] = (64, 64),\n                         flatten: bool = True) -> np.ndarray:\n        source = Path(source) if isinstance(source, str) else source\n\n        if str(source).endswith((\".tif\", \".tiff\", \".geotiff\")):\n            try:\n                import rasterio\n            except ImportError:\n                raise ImportError(\"Geospatial için: pip install rasterio\")\n\n            with rasterio.open(source) as src:\n                data = src.read(band).astype(np.float64)\n                data = (data - data.min()) / (data.max() - data.min() + 1e-8)\n\n                if resize:\n                    from PIL import Image\n                    img = Image.fromarray((data * 255).astype(np.uint8))\n                    img = img.resize(resize)\n                    data = np.array(img, dtype=np.float64) / 255.0\n\n            if flatten:\n                data = data.flatten().reshape(1, -1)\n            return data\n        else:\n            import pandas as pd\n            df = pd.read_csv(source)\n            return df.select_dtypes(include=[np.number]).values.astype(np.float64)\n\n    # ==================================================================\n    # ADIM 2: Hedef Cihaz Seçimi\n    # ==================================================================\n    def select_device(self, device_key: str) -> \"QuantumAppPipeline\":\n        if device_key not in DEVICE_CATALOG:\n            raise ValueError(\n                f\"Bilinmeyen cihaz: {device_key}\\n\"\n                f\"Mevcut cihazlar: {list(DEVICE_CATALOG.keys())}\"\n            )\n        self.device_key = device_key\n        self.device_info = DEVICE_CATALOG[device_key]\n        self.max_qubits = self.device_info[\"max_qubits\"]\n\n        paradigm = self.device_info.get(\"paradigm\", \"gate\")\n        self._log(\n            f\"Cihaz seçildi: {self.device_info['name']} \"\n            f\"(max {self.max_qubits} qubit | {self.device_info['type']} | paradigm: {paradigm})\"\n        )\n\n        if paradigm not in (\"gate\",):\n            self._log(\n                f\"⚠ UYARI: Bu cihaz '{paradigm}' paradigmasında çalışır. \"\n                f\"Standart gate-model circuit yerine özel encoding gerekebilir. \"\n                f\"Detay: {self.device_info.get('note', '')}\"\n            )\n        return self\n\n    def list_devices(self) -> None:\n        print(\"\\n\" + \"=\" * 90)\n        print(f\"{'Key':22s} | {'Cihaz Adı':28s} | {'Max Q':6s} | {'Tip':16s} | Paradigm\")\n        print(\"-\" * 90)\n        for key, info in DEVICE_CATALOG.items():\n            print(f\"{key:22s} | {info['name']:28s} | {info['max_qubits']:6d} | \"\n                  f\"{info['type']:16s} | {info.get('paradigm', '-')}\")\n        print(\"=\" * 90)\n        print(\"Not: annealing / analog / continuous-variable cihazlar gate-model circuit ile doğrudan uyumlu değildir.\\n\")\n\n    # ==================================================================\n    # ADIM 3: Qubit Bütçesi + Encoding Önerisi\n    # ==================================================================\n    def analyze_and_recommend(self, force_qubits: Optional[int] = None) -> Dict[str, Any]:\n        if self.processed_data is None:\n            raise RuntimeError(\"Önce load_data() ile veri yüklemelisiniz.\")\n        if self.device_key is None:\n            raise RuntimeError(\"Önce select_device() ile cihaz seçmelisiniz.\")\n\n        n_features = self.processed_data.shape[1]\n        max_q = self.max_qubits\n        paradigm = self.device_info.get(\"paradigm\", \"gate\")\n\n        angle_qubits = n_features\n        amplitude_qubits = int(np.ceil(np.log2(max(n_features, 2))))\n\n        if force_qubits is not None:\n            recommended_q = min(force_qubits, max_q)\n            if recommended_q >= n_features:\n                encoding = \"angle\"\n            elif recommended_q >= amplitude_qubits:\n                encoding = \"amplitude\"\n            else:\n                encoding = \"dense\"\n        else:\n            if n_features <= max_q:\n                encoding = \"angle\"\n                recommended_q = n_features\n            elif amplitude_qubits <= max_q:\n                encoding = \"amplitude\"\n                recommended_q = amplitude_qubits\n            else:\n                encoding = \"dense\"\n                recommended_q = max_q\n                self._log(\n                    f\"Uyarı: Özellik sayısı ({n_features}) cihaz limitini aşıyor. \"\n                    f\"PCA ile {max_q} boyuta indirilecek.\"\n                )\n\n        self.recommended_qubits = recommended_q\n        self.encoding_type = encoding\n\n        report = {\n            \"data_type\": self.data_type,\n            \"n_features_original\": n_features,\n            \"device\": self.device_info[\"name\"],\n            \"device_type\": self.device_info[\"type\"],\n            \"paradigm\": paradigm,\n            \"device_max_qubits\": max_q,\n            \"recommended_qubits\": recommended_q,\n            \"recommended_encoding\": encoding,\n            \"angle_qubits_needed\": angle_qubits,\n            \"amplitude_qubits_needed\": amplitude_qubits,\n            \"is_feasible_without_pca\": n_features <= max_q or amplitude_qubits <= max_q,\n            \"pca_required\": n_features > max_q and amplitude_qubits > max_q,\n            \"gate_model_compatible\": paradigm == \"gate\",\n            \"note\": self.device_info.get(\"note\", \"\")\n        }\n\n        self._log(f\"Öneri → Encoding: {encoding}, Qubit: {recommended_q}, Paradigm: {paradigm}\")\n        return report\n\n    # ==================================================================\n    # ADIM 4: Encoding + Circuit Üretimi (Düzeltilmiş Amplitude)\n    # ==================================================================\n    def encode(self, encoding: Optional[str] = None,\n               n_qubits: Optional[int] = None,\n               pca_components: Optional[int] = None,\n               reps: int = 2) -> QuantumCircuit:\n        if self.processed_data is None or self.device_key is None:\n            raise RuntimeError(\"Önce veri yükleyip cihaz seçmelisiniz.\")\n\n        paradigm = self.device_info.get(\"paradigm\", \"gate\")\n        if paradigm not in (\"gate\",):\n            self._log(\n                f\"⚠ Bu cihaz ({paradigm}) için üretilen circuit sadece referans / simülasyon amaçlıdır. \"\n                f\"Gerçek çalıştırma için cihaza özel encoding (QUBO, Hamiltonian, CV) gerekir.\"\n            )\n\n        if self.encoding_type is None:\n            self.analyze_and_recommend(force_qubits=n_qubits)\n\n        encoding = encoding or self.encoding_type\n        n_qubits = n_qubits or self.recommended_qubits\n        n_qubits = min(n_qubits, self.max_qubits)\n\n        data = self.processed_data.copy()\n\n        # PCA (amplitude hariç)\n        if data.shape[1] > n_qubits and encoding != \"amplitude\":\n            n_comp = pca_components or n_qubits\n            self.pca = PCA(n_components=n_comp, random_state=self.random_seed)\n            data = self.pca.fit_transform(data)\n            self._log(f\"PCA uygulandı: {self.processed_data.shape[1]} → {data.shape[1]}\")\n\n        # Scaler sadece angle / dense / basis için\n        if encoding in (\"angle\", \"dense\", \"basis\"):\n            if data.shape[0] == 1:\n                # Tek örnekte MinMaxScaler bozulmasın diye manuel ölçekle\n                data = data - data.min()\n                rng = data.max() - data.min()\n                if rng > 1e-12:\n                    data = data / rng * np.pi\n                else:\n                    data = np.full_like(data, np.pi / 2.0)\n            else:\n                self.scaler = MinMaxScaler(feature_range=(0, np.pi))\n                data = self.scaler.fit_transform(data)\n\n        if encoding == \"angle\":\n            qc = self._angle_encode(data, n_qubits, reps)\n        elif encoding == \"amplitude\":\n            qc = self._amplitude_encode(data, n_qubits)\n        elif encoding == \"dense\":\n            qc = self._dense_encode(data, n_qubits, reps)\n        elif encoding == \"basis\":\n            qc = self._basis_encode(data, n_qubits)\n        else:\n            raise ValueError(f\"Bilinmeyen encoding: {encoding}\")\n\n        self.circuit = qc\n        self.encoding_type = encoding\n        self._log(f\"Circuit üretildi: {qc.num_qubits} qubit, depth≈{qc.depth()}\")\n        return qc\n\n    def _angle_encode(self, data: np.ndarray, n_qubits: int, reps: int) -> QuantumCircuit:\n        n_features = min(data.shape[1], n_qubits)\n        fmap = ZFeatureMap(feature_dimension=n_features, reps=reps)\n        self.feature_map = fmap\n        params = data[0, :n_features]\n        return fmap.assign_parameters(params)\n\n    def _amplitude_encode(self, data: np.ndarray, n_qubits: int) -> QuantumCircuit:\n        \"\"\"Tek örnek ve sıfır-norm sorununa karşı dayanıklı amplitude encoding.\"\"\"\n        sample = np.asarray(data[0], dtype=np.float64).copy()\n        sample = np.maximum(sample, 0.0)  # negatifleri temizle\n\n        # Eğer scaler yüzünden tüm değerler aynı olduysa orijinal veriyi kullan\n        if np.allclose(sample, sample.flat[0]):\n            sample = np.asarray(self.processed_data[0], dtype=np.float64).copy()\n            sample = np.maximum(sample, 0.0)\n\n        target_dim = 2 ** n_qubits\n        if len(sample) > target_dim:\n            sample = sample[:target_dim]\n\n        padded = np.zeros(target_dim, dtype=np.float64)\n        padded[:len(sample)] = sample\n\n        norm = np.linalg.norm(padded)\n        if norm < 1e-12:\n            self._log(\"[Uyarı] Vektör normu sıfır → Uniform superposition kullanılıyor.\")\n            padded = np.ones(target_dim) / np.sqrt(target_dim)\n        else:\n            padded = padded / norm\n\n        qc = QuantumCircuit(n_qubits, name=\"AmplitudeEncoding\")\n        qc.initialize(padded, range(n_qubits))\n        return qc\n\n    def _dense_encode(self, data: np.ndarray, n_qubits: int, reps: int) -> QuantumCircuit:\n        n_features = min(data.shape[1], n_qubits)\n        fmap = ZZFeatureMap(feature_dimension=n_features, reps=reps, entanglement=\"full\")\n        self.feature_map = fmap\n        params = data[0, :n_features]\n        return fmap.assign_parameters(params)\n\n    def _basis_encode(self, data: np.ndarray, n_qubits: int) -> QuantumCircuit:\n        sample = data[0, :n_qubits]\n        qc = QuantumCircuit(n_qubits, name=\"BasisEncoding\")\n        for i, val in enumerate(sample):\n            if val > 0.5:\n                qc.x(i)\n        return qc\n\n    # ==================================================================\n    # Yardımcı Metodlar\n    # ==================================================================\n    def summary(self) -> None:\n        print(\"\\n\" + \"=\" * 65)\n        print(\"QUANTUM APPLICATION PIPELINE – ÖZET\")\n        print(\"=\" * 65)\n        print(f\"Veri Tipi            : {self.data_type}\")\n        if self.processed_data is not None:\n            print(f\"Veri Şekli           : {self.processed_data.shape}\")\n        if self.device_info:\n            print(f\"Hedef Cihaz          : {self.device_info['name']}\")\n            print(f\"Cihaz Tipi / Paradigm: {self.device_info['type']} / {self.device_info.get('paradigm')}\")\n        print(f\"Cihaz Max Qubit      : {self.max_qubits}\")\n        print(f\"Önerilen Qubit       : {self.recommended_qubits}\")\n        print(f\"Encoding Yöntemi     : {self.encoding_type}\")\n        if self.circuit:\n            print(f\"Circuit Qubit        : {self.circuit.num_qubits}\")\n            print(f\"Circuit Depth        : {self.circuit.depth()}\")\n        print(\"=\" * 65)\n\n    def _log(self, msg: str):\n        print(f\"[Pipeline] {msg}\")\n        self.history.append(msg)\n\n    def get_circuit(self) -> QuantumCircuit:\n        if self.circuit is None:\n            raise RuntimeError(\"Henüz encode() çağrılmadı.\")\n        return self.circuit\n\n\nprint(\"QuantumAppPipeline sınıfı yüklendi (Qiskit 2.5 uyumlu + yeni cihazlar)!\")",
   "outputs": [
    {
     "output_type": "error",
     "ename": "ImportError",
     "evalue": "cannot import name '_slice' from 'numpy._core.umath' (/usr/local/lib/python3.13/dist-packages/numpy/_core/umath.py)",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_2676/3394877680.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mqiskit\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mquantum_info\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mStatevector\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[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpreprocessing\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mMinMaxScaler\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mStandardScaler\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;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecomposition\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mPCA\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/sklearn/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     68\u001b[0m \u001b[0;31m# it and importing it first would fail if the OpenMP dll cannot be found.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     69\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m__check_build\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_distributor_init\u001b[0m  \u001b[0;31m# noqa: E402 F401\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 70\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mclone\u001b[0m  \u001b[0;31m# noqa: E402\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     71\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_show_versions\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mshow_versions\u001b[0m  \u001b[0;31m# noqa: E402\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     72\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/sklearn/base.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     18\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_config\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mconfig_context\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_config\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     19\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexceptions\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mInconsistentVersionWarning\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_metadata_requests\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m_MetadataRequester\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_routing_enabled\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_missing\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mis_pandas_na\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_scalar_nan\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     22\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_param_validation\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mvalidate_parameter_constraints\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/sklearn/utils/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmetadata_routing\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_bunch\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mBunch\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_chunking\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgen_batches\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgen_even_slices\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0;31m# Make _safe_indexing importable from here for backward compat as this particular\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/sklearn/utils/_chunking.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_config\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_config\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_param_validation\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mInterval\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalidate_params\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/sklearn/utils/_param_validation.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mscipy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msparse\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcsr_array\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0missparse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_config\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mconfig_context\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mget_config\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/scipy/sparse/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m    302\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mimportlib\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0m_importlib\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    303\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 304\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_base\u001b[0m \u001b[0;32mimport\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    305\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_csr\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    306\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0m_csc\u001b[0m \u001b[0;32mimport\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.13/dist-packages/scipy/sparse/_base.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0moperator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m from ._sputils import (asmatrix, check_reshape_kwargs, check_shape,\n\u001b[0m\u001b[1;32m      9\u001b[0m                        \u001b[0mget_sum_dtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0misdense\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0misscalarlike\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_todata\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     10\u001b[0m                        matrix, validateaxis, getdtype, is_pydata_spmatrix)\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/scipy/sparse/_sputils.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmath\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mscipy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msparse\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mscipy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_lib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_util\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnp_long\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp_ulong\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;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/scipy/_lib/_util.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m from scipy._lib._array_api import (Array, array_namespace, is_lazy_array,\n\u001b[0m\u001b[1;32m     15\u001b[0m                                    \u001b[0mis_numpy\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_marray\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxp_result_device\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m                                    xp_size, xp_result_type)\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/scipy/_lib/_array_api.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mscipy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_lib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0marray_api_compat\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 25\u001b[0;31m from scipy._lib.array_api_compat import (\n\u001b[0m\u001b[1;32m     26\u001b[0m     \u001b[0mis_array_api_obj\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     27\u001b[0m     \u001b[0mis_lazy_array\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.13/dist-packages/scipy/_lib/array_api_compat/numpy/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtyping\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mFinal\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m  \u001b[0;31m# noqa: F403  # pyright: ignore[reportWildcardImportFromLibrary]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;31m# from numpy import * doesn't overwrite these builtin names\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/numpy/__init__.py\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(attr)\u001b[0m\n\u001b[1;32m    368\u001b[0m         \u001b[0mravel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    369\u001b[0m         \u001b[0mrecarray\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 370\u001b[0;31m         \u001b[0mreciprocal\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    371\u001b[0m         \u001b[0mrecord\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    372\u001b[0m         \u001b[0mremainder\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.13/dist-packages/numpy/char/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_core\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdefchararray\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m__all__\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m__doc__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0m__DEPRECATED\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfrozenset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m\"chararray\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"array\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"asarray\"\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      4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/numpy/_core/defchararray.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_core\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0moverrides\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     22\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_core\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultiarray\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcompare_chararrays\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m from numpy._core.strings import (\n\u001b[0m\u001b[1;32m     24\u001b[0m     \u001b[0m_join\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mjoin\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     25\u001b[0m     \u001b[0m_rsplit\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mrsplit\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.13/dist-packages/numpy/_core/strings.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     20\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_core\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultiarray\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0m_vec_string\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_core\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moverrides\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0marray_function_dispatch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mset_module\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m from numpy._core.umath import (\n\u001b[0m\u001b[1;32m     23\u001b[0m     \u001b[0m_center\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m     \u001b[0m_expandtabs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mImportError\u001b[0m: cannot import name '_slice' from 'numpy._core.umath' (/usr/local/lib/python3.13/dist-packages/numpy/_core/umath.py)",
      "",
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n"
     ],
     "errorDetails": {
      "actions": [
       {
        "action": "open_url",
        "actionText": "Open Examples",
        "url": "/notebooks/snippets/importing_libraries.ipynb"
       }
      ]
     }
    }
   ],
   "execution_count": null,
   "id": "hzIsLAdbNxOA"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0H2AplyGNxOD"
   },
   "source": "## 3. Tüm Cihazları Listele",
   "id": "0H2AplyGNxOD"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "BiKewRWcNxOE"
   },
   "source": "pipeline = QuantumAppPipeline()\npipeline.list_devices()",
   "outputs": [],
   "execution_count": null,
   "id": "BiKewRWcNxOE"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "fzA0IUIjNxOF"
   },
   "source": "## 4. Örnek 1 – CSV + Origin Wukong-180",
   "id": "fzA0IUIjNxOF"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "CrHsRJNKNxOG"
   },
   "source": "import pandas as pd\n\n# Sahte CSV\ndummy_csv = pd.DataFrame(\n    np.random.rand(80, 18),\n    columns=[f\"f{i}\" for i in range(18)]\n)\ndummy_csv.to_csv(\"dummy_data.csv\", index=False)\nprint(\"dummy_data.csv oluşturuldu →\", dummy_csv.shape)",
   "outputs": [],
   "execution_count": null,
   "id": "CrHsRJNKNxOG"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "6YxLtiKFNxOH"
   },
   "source": "pipeline = QuantumAppPipeline()\n\n(pipeline\n .select_data_type(\"csv\")\n .load_data(\"dummy_data.csv\")\n .select_device(\"wukong\")          # Origin Wukong-180\n)\n\nreport = pipeline.analyze_and_recommend()\nprint(\"\\n--- Analiz Raporu ---\")\nfor k, v in report.items():\n    print(f\"{k:28s}: {v}\")",
   "outputs": [],
   "execution_count": null,
   "id": "6YxLtiKFNxOH"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "X6j2cGPpNxOI"
   },
   "source": "qc = pipeline.encode()\npipeline.summary()\nprint(\"\\n--- Circuit ---\")\nprint(qc.draw(output=\"text\", fold=120))",
   "outputs": [],
   "execution_count": null,
   "id": "X6j2cGPpNxOI"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "b_x0PQIGNxOJ"
   },
   "source": "## 5. Örnek 2 – Resim + Amplitude Encoding (düzeltilmiş)",
   "id": "b_x0PQIGNxOJ"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "9ddZIahXNxOJ"
   },
   "source": "from PIL import Image\n\nfake_img = Image.fromarray((np.random.rand(64, 64) * 255).astype(np.uint8))\nfake_img.save(\"fake_image.png\")\nprint(\"fake_image.png oluşturuldu.\")\n\npipeline3 = QuantumAppPipeline()\n\n(pipeline3\n .select_data_type(\"image\")\n .load_data(\"fake_image.png\", resize=(16, 16), grayscale=True)\n .select_device(\"simulator\")\n)\n\nreport3 = pipeline3.analyze_and_recommend()\nprint(\"\\n--- Resim Analiz Raporu ---\")\nfor k, v in report3.items():\n    print(f\"{k:28s}: {v}\")\n\nqc3 = pipeline3.encode(encoding=\"amplitude\")\npipeline3.summary()\nprint(qc3.draw(output=\"text\", fold=100))",
   "outputs": [],
   "execution_count": null,
   "id": "9ddZIahXNxOJ"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "xxw2Qj8tNxOK"
   },
   "source": "## 6. Örnek 3 – Cold Atom (QuEra Aquila) & Photonic & D-Wave",
   "id": "xxw2Qj8tNxOK"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "ioZV-3PTNxOL"
   },
   "source": "print(\"=== QuEra Aquila (Cold Atom – Analog) ===\")\np_aquila = QuantumAppPipeline()\n(p_aquila\n .select_data_type(\"csv\")\n .load_data(\"dummy_data.csv\")\n .select_device(\"quera_aquila\")\n)\nprint(p_aquila.analyze_and_recommend())\n\nprint(\"\\n=== Xanadu Aurora (Photonic – Continuous Variable) ===\")\np_xanadu = QuantumAppPipeline()\n(p_xanadu\n .select_data_type(\"csv\")\n .load_data(\"dummy_data.csv\")\n .select_device(\"xanadu_aurora\")\n)\nprint(p_xanadu.analyze_and_recommend())\n\nprint(\"\\n=== D-Wave Advantage2 (Adiabatic / Annealing) ===\")\np_dwave = QuantumAppPipeline()\n(p_dwave\n .select_data_type(\"csv\")\n .load_data(\"dummy_data.csv\")\n .select_device(\"dwave_advantage2\")\n)\nprint(p_dwave.analyze_and_recommend())",
   "outputs": [],
   "execution_count": null,
   "id": "ioZV-3PTNxOL"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "rQVTLPq5NxOL"
   },
   "source": "## 7. Encoding Karşılaştırması",
   "id": "rQVTLPq5NxOL"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "WR8igYPxNxOM"
   },
   "source": "p = QuantumAppPipeline()\n(p.select_data_type(\"csv\")\n  .load_data(\"dummy_data.csv\")\n  .select_device(\"simulator\"))\n\nfor enc in [\"angle\", \"dense\", \"amplitude\", \"basis\"]:\n    qc = p.encode(encoding=enc, n_qubits=6, reps=2)\n    print(f\"{enc:12s} → qubits={qc.num_qubits}, depth={qc.depth()}\")",
   "outputs": [],
   "execution_count": null,
   "id": "WR8igYPxNxOM"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "lplS9vbTNxOM"
   },
   "source": "## 8. Statevector Kontrolü (Amplitude)",
   "id": "lplS9vbTNxOM"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "Z3--dgU-NxON"
   },
   "source": "from qiskit.quantum_info import Statevector\n\nsv = Statevector.from_instruction(qc3)\nprint(\"Norm (1.0 olmalı):\", np.round(np.linalg.norm(sv.data), 8))\nprint(\"İlk 8 amplitude :\", np.round(sv.data[:8], 4))",
   "outputs": [],
   "execution_count": null,
   "id": "Z3--dgU-NxON"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "wEkAg-HmNxON"
   },
   "source": "## 9. Kendi Verin İçin Şablon",
   "id": "wEkAg-HmNxON"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "jCemQWxrNxON"
   },
   "source": "# ============================================================\n# KENDİ VERİN İÇİN HAZIR ŞABLON\n# ============================================================\n\nmy_pipeline = QuantumAppPipeline()\n\n# 1. Veri tipi: \"csv\" | \"image\" | \"video\" | \"geospatial\"\nmy_pipeline.select_data_type(\"csv\")\n\n# 2. Veri yükle (Colab sol menüden Upload)\nmy_pipeline.load_data(\"dummy_data.csv\")\n\n# 3. Cihaz seç\nmy_pipeline.list_devices()\nmy_pipeline.select_device(\"wukong\")          # veya quera_aquila, xanadu_aurora, dwave_advantage2 ...\n\n# 4. Analiz\nreport = my_pipeline.analyze_and_recommend()\nprint(report)\n\n# 5. Encode\nqc = my_pipeline.encode()                   # otomatik\n# qc = my_pipeline.encode(encoding=\"amplitude\", n_qubits=8)\n\nmy_pipeline.summary()\nprint(qc.draw(output=\"text\", fold=120))",
   "outputs": [],
   "execution_count": null,
   "id": "jCemQWxrNxON"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Z2qCIpLbNxOO"
   },
   "source": "---\n\n### Önemli Notlar (2026)\n\n| Cihaz | Paradigm | Encoding Notu |\n|-------|----------|---------------|\n| IBM / Wukong / IonQ / Quantinuum / Simulator | **Gate** | Standart Angle / Amplitude / Dense / Basis |\n| QuEra Aquila | **Analog** | Hamiltonian / Rydberg encoding gerekir |\n| Xanadu Aurora | **Continuous-Variable** | GKP / squeezed-state encoding |\n| D-Wave Advantage2 | **Annealing** | QUBO / Ising formulasyonu |\n| Quandela Belenos | **Gate (Photonic)** | Standart gate-model uyumlu |\n\n- Amplitude encoding tek örnekte (resim/video) artık güvenli çalışır.\n- Büyük veri için otomatik PCA devreye girer.\n- Gerçek donanıma göndermek için ilgili provider SDK’sı (qiskit-ibm-runtime, amazon-braket, dwave-ocean, strawberryfields vb.) gerekir.\n\nİyi çalışmalar! 🚀",
   "id": "Z2qCIpLbNxOO"
  }
 ]
}