{
 "nbformat": 4,
 "nbformat_minor": 5,
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.10.0"
  },
  "colab": {
   "provenance": []
  }
 },
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "V-Zw8ib7Kf0F"
   },
   "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\n- Local Aer Simulator\n- IBM Quantum (Brisbane, Kyiv...)\n- IonQ Aria\n- Quantinuum H1\n\n---",
   "id": "V-Zw8ib7Kf0F"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "14uSLKBZKf0L"
   },
   "source": "## 1. Kurulum (Colab için)",
   "id": "14uSLKBZKf0L"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "y1GnWq-WKf0M",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788772784572,
     "user_tz": -180,
     "elapsed": 18600,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "3e2fca01-b8e5-40fb-8128-b7218ef95abd"
   },
   "source": "# Colab'da çalıştırın\n!pip install qiskit qiskit-aer qiskit-ibm-runtime numpy pandas scikit-learn pillow opencv-python-headless -q\n\n# Geospatial için (opsiyonel)\n# !pip install rasterio geopandas -q\n\nprint(\"Kurulum tamamlandı!\")",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.8/9.8 MB\u001b[0m \u001b[31m108.0 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[31m120.2 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[31m83.8 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[31m26.4 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[32m95.7/95.7 kB\u001b[0m \u001b[31m7.9 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[31m96.4 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[31m19.1 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[31m3.7 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[31m6.6 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.8 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[31m37.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
      "\u001b[?25hKurulum tamamlandı!\n"
     ]
    }
   ],
   "execution_count": 1,
   "id": "y1GnWq-WKf0M"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "2tZnjTsQKf0P"
   },
   "source": "## 2. Pipeline Sınıfı (Ana Engine)",
   "id": "2tZnjTsQKf0P"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "lgnEGaRqKf0Q",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788772806925,
     "user_tz": -180,
     "elapsed": 1609,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "d595b4fb-6b53-4ce9-bdf4-faff18472f27"
   },
   "source": "from typing import Union, List, Dict, Optional, Tuple, Any\nimport numpy as np\nimport warnings\nfrom pathlib import Path\n\n# Qiskit\nfrom qiskit import QuantumCircuit\nfrom qiskit.circuit.library import ZZFeatureMap, ZFeatureMap, PauliFeatureMap\nfrom qiskit.quantum_info import Statevector\n\n# Preprocessing\nfrom sklearn.preprocessing import MinMaxScaler, StandardScaler\nfrom sklearn.decomposition import PCA\n\n# ------------------------------------------------------------\n# Cihaz Kataloğu\n# ------------------------------------------------------------\nDEVICE_CATALOG = {\n    \"simulator\": {\n        \"name\": \"Aer Simulator (local)\",\n        \"max_qubits\": 32,\n        \"type\": \"simulator\",\n        \"noise\": False,\n        \"provider\": \"qiskit\"\n    },\n    \"ibm_brisbane\": {\n        \"name\": \"IBM Brisbane\",\n        \"max_qubits\": 127,\n        \"type\": \"superconducting\",\n        \"noise\": True,\n        \"provider\": \"ibm\"\n    },\n    \"ibm_kyiv\": {\n        \"name\": \"IBM Kyiv\",\n        \"max_qubits\": 127,\n        \"type\": \"superconducting\",\n        \"noise\": True,\n        \"provider\": \"ibm\"\n    },\n    \"ionq_aria\": {\n        \"name\": \"IonQ Aria\",\n        \"max_qubits\": 25,\n        \"type\": \"trapped-ion\",\n        \"noise\": True,\n        \"provider\": \"ionq\"\n    },\n    \"quantinuum_h1\": {\n        \"name\": \"Quantinuum H1\",\n        \"max_qubits\": 20,\n        \"type\": \"trapped-ion\",\n        \"noise\": True,\n        \"provider\": \"quantinuum\"\n    },\n    \"local_high_qubit\": {\n        \"name\": \"Local High-Qubit Simulator\",\n        \"max_qubits\": 40,\n        \"type\": \"simulator\",\n        \"noise\": False,\n        \"provider\": \"local\"\n    }\n}\n\n\nclass QuantumAppPipeline:\n    \"\"\"\n    Quantum Application Development Pipeline\n\n    Adımlar:\n    1. Veri tipi seçimi + yükleme\n    2. Hedef cihaz seçimi\n    3. Qubit bütçesi hesaplama\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\"):  # DataFrame\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        try:\n            from PIL import Image\n        except ImportError:\n            raise ImportError(\"Resim işleme için: pip install pillow\")\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        try:\n            import cv2\n        except ImportError:\n            raise ImportError(\"Video işleme için: pip install opencv-python-headless\")\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        arr = np.array(frames).flatten().reshape(1, -1)\n        return arr\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            numeric = df.select_dtypes(include=[np.number]).values\n            return numeric.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        self._log(\n            f\"Cihaz seçildi: {self.device_info['name']} \"\n            f\"(max {self.max_qubits} qubit, tip: {self.device_info['type']})\"\n        )\n        return self\n\n    def list_devices(self) -> None:\n        print(\"\\n=== Desteklenen Hedef Cihazlar ===\")\n        for key, info in DEVICE_CATALOG.items():\n            print(f\"  {key:20s} → {info['name']:25s} | \"\n                  f\"max_qubits={info['max_qubits']:3d} | {info['type']}\")\n        print()\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\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_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        }\n\n        self._log(f\"Öneri → Encoding: {encoding}, Qubit: {recommended_q}\")\n        return report\n\n    # ==================================================================\n    # ADIM 4: Encoding + Circuit Üretimi\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        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        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        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        sample = data[0].copy()\n        target_dim = 2 ** n_qubits\n        if len(sample) > target_dim:\n            sample = sample[:target_dim]\n        padded = np.zeros(target_dim)\n        padded[:len(sample)] = sample\n        norm = np.linalg.norm(padded)\n        if norm > 0:\n            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\" + \"=\" * 60)\n        print(\"QUANTUM APPLICATION PIPELINE - ÖZET\")\n        print(\"=\" * 60)\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        print(f\"Hedef Cihaz        : {self.device_info['name'] if self.device_info else '-'}\")\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(\"=\" * 60)\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\nprint(\"QuantumAppPipeline sınıfı yüklendi!\")",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "QuantumAppPipeline sınıfı yüklendi!\n"
     ]
    }
   ],
   "execution_count": 2,
   "id": "lgnEGaRqKf0Q"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "-btX8CqOKf0S"
   },
   "source": "## 3. Cihazları Listele",
   "id": "-btX8CqOKf0S"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "h6JzVXFAKf0T",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788772825487,
     "user_tz": -180,
     "elapsed": 24,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "36c706b3-a598-421b-e0af-29f4a29fceb2"
   },
   "source": "pipeline = QuantumAppPipeline()\npipeline.list_devices()",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "\n",
      "=== Desteklenen Hedef Cihazlar ===\n",
      "  simulator            → Aer Simulator (local)     | max_qubits= 32 | simulator\n",
      "  ibm_brisbane         → IBM Brisbane              | max_qubits=127 | superconducting\n",
      "  ibm_kyiv             → IBM Kyiv                  | max_qubits=127 | superconducting\n",
      "  ionq_aria            → IonQ Aria                 | max_qubits= 25 | trapped-ion\n",
      "  quantinuum_h1        → Quantinuum H1             | max_qubits= 20 | trapped-ion\n",
      "  local_high_qubit     → Local High-Qubit Simulator | max_qubits= 40 | simulator\n",
      "\n"
     ]
    }
   ],
   "execution_count": 3,
   "id": "h6JzVXFAKf0T"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "oaM3t7QHKf0U"
   },
   "source": "## 4. Örnek 1: CSV Verisi ile Tam Pipeline\n\nAkış:\n1. Veri tipi seç (`csv`)\n2. Veriyi yükle\n3. Cihaz seç\n4. Analiz + öneri al\n5. Encode et + Circuit üret",
   "id": "oaM3t7QHKf0U"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 217
    },
    "id": "1UGYBCCbKf0V",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788772846021,
     "user_tz": -180,
     "elapsed": 119,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "2633e2c5-70fb-4d4d-c43b-e2649470f492"
   },
   "source": "import pandas as pd\n\n# Sahte CSV verisi oluştur\ndummy_csv = pd.DataFrame(\n    np.random.rand(100, 15),\n    columns=[f\"feature_{i}\" for i in range(15)]\n)\ndummy_csv.to_csv(\"dummy_data.csv\", index=False)\nprint(\"dummy_data.csv oluşturuldu. Şekil:\", dummy_csv.shape)\ndummy_csv.head()",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "dummy_data.csv oluşturuldu. Şekil: (100, 15)\n"
     ]
    },
    {
     "output_type": "execute_result",
     "data": {
      "text/plain": [
       "   feature_0  feature_1  feature_2  feature_3  feature_4  feature_5  \\\n",
       "0   0.374540   0.950714   0.731994   0.598658   0.156019   0.155995   \n",
       "1   0.183405   0.304242   0.524756   0.431945   0.291229   0.611853   \n",
       "2   0.607545   0.170524   0.065052   0.948886   0.965632   0.808397   \n",
       "3   0.662522   0.311711   0.520068   0.546710   0.184854   0.969585   \n",
       "4   0.388677   0.271349   0.828738   0.356753   0.280935   0.542696   \n",
       "\n",
       "   feature_6  feature_7  feature_8  feature_9  feature_10  feature_11  \\\n",
       "0   0.058084   0.866176   0.601115   0.708073    0.020584    0.969910   \n",
       "1   0.139494   0.292145   0.366362   0.456070    0.785176    0.199674   \n",
       "2   0.304614   0.097672   0.684233   0.440152    0.122038    0.495177   \n",
       "3   0.775133   0.939499   0.894827   0.597900    0.921874    0.088493   \n",
       "4   0.140924   0.802197   0.074551   0.986887    0.772245    0.198716   \n",
       "\n",
       "   feature_12  feature_13  feature_14  \n",
       "0    0.832443    0.212339    0.181825  \n",
       "1    0.514234    0.592415    0.046450  \n",
       "2    0.034389    0.909320    0.258780  \n",
       "3    0.195983    0.045227    0.325330  \n",
       "4    0.005522    0.815461    0.706857  "
      ],
      "text/html": [
       "\n",
       "  <div id=\"df-ebb8306f-9fd2-49ae-a904-b4d09336cba1\" class=\"colab-df-container\">\n",
       "    <div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature_0</th>\n",
       "      <th>feature_1</th>\n",
       "      <th>feature_2</th>\n",
       "      <th>feature_3</th>\n",
       "      <th>feature_4</th>\n",
       "      <th>feature_5</th>\n",
       "      <th>feature_6</th>\n",
       "      <th>feature_7</th>\n",
       "      <th>feature_8</th>\n",
       "      <th>feature_9</th>\n",
       "      <th>feature_10</th>\n",
       "      <th>feature_11</th>\n",
       "      <th>feature_12</th>\n",
       "      <th>feature_13</th>\n",
       "      <th>feature_14</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.374540</td>\n",
       "      <td>0.950714</td>\n",
       "      <td>0.731994</td>\n",
       "      <td>0.598658</td>\n",
       "      <td>0.156019</td>\n",
       "      <td>0.155995</td>\n",
       "      <td>0.058084</td>\n",
       "      <td>0.866176</td>\n",
       "      <td>0.601115</td>\n",
       "      <td>0.708073</td>\n",
       "      <td>0.020584</td>\n",
       "      <td>0.969910</td>\n",
       "      <td>0.832443</td>\n",
       "      <td>0.212339</td>\n",
       "      <td>0.181825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.183405</td>\n",
       "      <td>0.304242</td>\n",
       "      <td>0.524756</td>\n",
       "      <td>0.431945</td>\n",
       "      <td>0.291229</td>\n",
       "      <td>0.611853</td>\n",
       "      <td>0.139494</td>\n",
       "      <td>0.292145</td>\n",
       "      <td>0.366362</td>\n",
       "      <td>0.456070</td>\n",
       "      <td>0.785176</td>\n",
       "      <td>0.199674</td>\n",
       "      <td>0.514234</td>\n",
       "      <td>0.592415</td>\n",
       "      <td>0.046450</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.607545</td>\n",
       "      <td>0.170524</td>\n",
       "      <td>0.065052</td>\n",
       "      <td>0.948886</td>\n",
       "      <td>0.965632</td>\n",
       "      <td>0.808397</td>\n",
       "      <td>0.304614</td>\n",
       "      <td>0.097672</td>\n",
       "      <td>0.684233</td>\n",
       "      <td>0.440152</td>\n",
       "      <td>0.122038</td>\n",
       "      <td>0.495177</td>\n",
       "      <td>0.034389</td>\n",
       "      <td>0.909320</td>\n",
       "      <td>0.258780</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.662522</td>\n",
       "      <td>0.311711</td>\n",
       "      <td>0.520068</td>\n",
       "      <td>0.546710</td>\n",
       "      <td>0.184854</td>\n",
       "      <td>0.969585</td>\n",
       "      <td>0.775133</td>\n",
       "      <td>0.939499</td>\n",
       "      <td>0.894827</td>\n",
       "      <td>0.597900</td>\n",
       "      <td>0.921874</td>\n",
       "      <td>0.088493</td>\n",
       "      <td>0.195983</td>\n",
       "      <td>0.045227</td>\n",
       "      <td>0.325330</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.388677</td>\n",
       "      <td>0.271349</td>\n",
       "      <td>0.828738</td>\n",
       "      <td>0.356753</td>\n",
       "      <td>0.280935</td>\n",
       "      <td>0.542696</td>\n",
       "      <td>0.140924</td>\n",
       "      <td>0.802197</td>\n",
       "      <td>0.074551</td>\n",
       "      <td>0.986887</td>\n",
       "      <td>0.772245</td>\n",
       "      <td>0.198716</td>\n",
       "      <td>0.005522</td>\n",
       "      <td>0.815461</td>\n",
       "      <td>0.706857</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "    <div class=\"colab-df-buttons\">\n",
       "\n",
       "  <div class=\"colab-df-container\">\n",
       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-ebb8306f-9fd2-49ae-a904-b4d09336cba1')\"\n",
       "            title=\"Convert this dataframe to an interactive table.\"\n",
       "            style=\"display:none;\">\n",
       "\n",
       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
       "  </svg>\n",
       "    </button>\n",
       "\n",
       "  <style>\n",
       "    .colab-df-container {\n",
       "      display:flex;\n",
       "      gap: 12px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert {\n",
       "      background-color: #E8F0FE;\n",
       "      border: none;\n",
       "      border-radius: 50%;\n",
       "      cursor: pointer;\n",
       "      display: none;\n",
       "      fill: #1967D2;\n",
       "      height: 32px;\n",
       "      padding: 0 0 0 0;\n",
       "      width: 32px;\n",
       "    }\n",
       "\n",
       "    .colab-df-convert:hover {\n",
       "      background-color: #E2EBFA;\n",
       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
       "      fill: #174EA6;\n",
       "    }\n",
       "\n",
       "    .colab-df-buttons div {\n",
       "      margin-bottom: 4px;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert {\n",
       "      background-color: #3B4455;\n",
       "      fill: #D2E3FC;\n",
       "    }\n",
       "\n",
       "    [theme=dark] .colab-df-convert:hover {\n",
       "      background-color: #434B5C;\n",
       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
       "      fill: #FFFFFF;\n",
       "    }\n",
       "  </style>\n",
       "\n",
       "    <script>\n",
       "      const buttonEl =\n",
       "        document.querySelector('#df-ebb8306f-9fd2-49ae-a904-b4d09336cba1 button.colab-df-convert');\n",
       "      buttonEl.style.display =\n",
       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
       "\n",
       "      async function convertToInteractive(key) {\n",
       "        const element = document.querySelector('#df-ebb8306f-9fd2-49ae-a904-b4d09336cba1');\n",
       "        const dataTable =\n",
       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
       "                                                    [key], {});\n",
       "        if (!dataTable) return;\n",
       "\n",
       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
       "          + ' to learn more about interactive tables.';\n",
       "        element.innerHTML = '';\n",
       "        dataTable['output_type'] = 'display_data';\n",
       "        await google.colab.output.renderOutput(dataTable, element);\n",
       "        const docLink = document.createElement('div');\n",
       "        docLink.innerHTML = docLinkHtml;\n",
       "        element.appendChild(docLink);\n",
       "      }\n",
       "    </script>\n",
       "  </div>\n",
       "\n",
       "\n",
       "    </div>\n",
       "  </div>\n"
      ],
      "application/vnd.google.colaboratory.intrinsic+json": {
       "type": "dataframe",
       "variable_name": "dummy_csv",
       "summary": "{\n  \"name\": \"dummy_csv\",\n  \"rows\": 100,\n  \"fields\": [\n    {\n      \"column\": \"feature_0\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.2964667595272099,\n        \"min\": 0.010995828658480478,\n        \"max\": 0.9905051420006733,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.6262203216314154,\n          0.8721239089441515,\n          0.8747016726841994\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_1\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.28573282531563066,\n        \"min\": 0.004939980934409616,\n        \"max\": 0.9865152487929797,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.13124487768238757,\n          0.9321182824836124,\n          0.528937134027212\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_2\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.3098795561214124,\n        \"min\": 0.01083765148029836,\n        \"max\": 0.9866625932671464,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.032526179491251916,\n          0.5651331835892089,\n          0.9390676985128962\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_3\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.27572495924903917,\n        \"min\": 0.03113408288451136,\n        \"max\": 0.9743948076661665,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.9208478478156868,\n          0.6966508238768923,\n          0.7987832357736654\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_4\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.30745429494659826,\n        \"min\": 0.011620539908100636,\n        \"max\": 0.9979341105333375,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.616650314520738,\n          0.9224993811772957,\n          0.9979341105333375\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_5\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.29154380760280596,\n        \"min\": 0.012154474689816341,\n        \"max\": 0.9758520794625346,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.7965372909761763,\n          0.7072386343133986,\n          0.35071181545171015\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_6\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.30192520623144625,\n        \"min\": 0.011353644767419069,\n        \"max\": 0.9997176732861306,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.4815223515125501,\n          0.15253904291426135,\n          0.7671882889311269\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_7\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.2905113609487139,\n        \"min\": 0.03667142693354297,\n        \"max\": 0.9968742518459474,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.11730818896239448,\n          0.5762883601668132,\n          0.40193091360924216\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_8\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.297903176206791,\n        \"min\": 0.006952130531190703,\n        \"max\": 0.9911686261369765,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.12518579220255044,\n          0.6067150463828559,\n          0.47987562030390885\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_9\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.27000393857668475,\n        \"min\": 0.04574203381251285,\n        \"max\": 0.9994137257706666,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.6855652872289714,\n          0.424130671302386,\n          0.6275054632183701\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_10\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.30491269540148713,\n        \"min\": 0.009197051616629648,\n        \"max\": 0.9929647961193003,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.4303058948994627,\n          0.7364442356247228,\n          0.8736771141863388\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_11\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.28955867769723287,\n        \"min\": 0.004632023004602859,\n        \"max\": 0.9860010638228709,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.20052472670033672,\n          0.9343670147690148,\n          0.9840834691992951\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_12\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.2723803115349668,\n        \"min\": 0.005522117123602399,\n        \"max\": 0.9699143978146032,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.4915945467414369,\n          0.9255685129067763,\n          0.7682734138645182\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_13\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.3075008007709708,\n        \"min\": 0.005061583846218687,\n        \"max\": 0.9963339160567419,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.06420893707513409,\n          0.4508393714041321,\n          0.41776678216733376\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"feature_14\",\n      \"properties\": {\n        \"dtype\": \"number\",\n        \"std\": 0.3027138762252573,\n        \"min\": 0.01811018382084051,\n        \"max\": 0.9866301229588469,\n        \"num_unique_values\": 100,\n        \"samples\": [\n          0.5819714019143988,\n          0.11323804584075525,\n          0.4213570022770702\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
      }
     },
     "metadata": {},
     "execution_count": 4
    }
   ],
   "execution_count": 4,
   "id": "1UGYBCCbKf0V"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "BhjnEv1sKf0W",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788772855224,
     "user_tz": -180,
     "elapsed": 37,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "8e2a2338-31ff-4d85-e8fd-31f6d0534fa1"
   },
   "source": "# Tam pipeline çalıştır\npipeline = QuantumAppPipeline()\n\n(pipeline\n .select_data_type(\"csv\")\n .load_data(\"dummy_data.csv\")\n .select_device(\"ibm_brisbane\")      # 127 qubit\n)\n\nreport = pipeline.analyze_and_recommend()\nprint(\"\\n--- Analiz Raporu ---\")\nfor k, v in report.items():\n    print(f\"{k:30s}: {v}\")",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "[Pipeline] Veri tipi seçildi: csv\n",
      "[Pipeline] Veri yüklendi. Şekil: (100, 15)\n",
      "[Pipeline] Cihaz seçildi: IBM Brisbane (max 127 qubit, tip: superconducting)\n",
      "[Pipeline] Öneri → Encoding: angle, Qubit: 15\n",
      "\n",
      "--- Analiz Raporu ---\n",
      "data_type                     : csv\n",
      "n_features_original           : 15\n",
      "device                        : IBM Brisbane\n",
      "device_max_qubits             : 127\n",
      "recommended_qubits            : 15\n",
      "recommended_encoding          : angle\n",
      "angle_qubits_needed           : 15\n",
      "amplitude_qubits_needed       : 4\n",
      "is_feasible_without_pca       : True\n",
      "pca_required                  : False\n"
     ]
    }
   ],
   "execution_count": 5,
   "id": "BhjnEv1sKf0W"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "dmwKyBBuKf0X",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788772863195,
     "user_tz": -180,
     "elapsed": 42,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "9b4e9d62-75ee-428a-e8f3-2d746e2eb956"
   },
   "source": "# Encoding + Circuit üret\nqc = pipeline.encode()\npipeline.summary()\n\nprint(\"\\n--- Circuit Çizimi ---\")\nprint(qc.draw(output=\"text\", fold=120))",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "[Pipeline] Circuit üretildi: 15 qubit, depth≈1\n",
      "\n",
      "============================================================\n",
      "QUANTUM APPLICATION PIPELINE - ÖZET\n",
      "============================================================\n",
      "Veri Tipi          : csv\n",
      "Veri Şekli         : (100, 15)\n",
      "Hedef Cihaz        : IBM Brisbane\n",
      "Cihaz Max Qubit    : 127\n",
      "Önerilen Qubit     : 15\n",
      "Encoding Yöntemi   : angle\n",
      "Circuit Qubit      : 15\n",
      "Circuit Depth      : 1\n",
      "============================================================\n",
      "\n",
      "--- Circuit Çizimi ---\n",
      "      »\n",
      " q_0: »\n",
      "      »\n",
      " q_1: »\n",
      "      »\n",
      " q_2: »\n",
      "      »\n",
      " q_3: »\n",
      "      »\n",
      " q_4: »\n",
      "      »\n",
      " q_5: »\n",
      "      »\n",
      " q_6: »\n",
      "      »\n",
      " q_7: »\n",
      "      »\n",
      " q_8: »\n",
      "      »\n",
      " q_9: »\n",
      "      »\n",
      "q_10: »\n",
      "      »\n",
      "q_11: »\n",
      "      »\n",
      "q_12: »\n",
      "      »\n",
      "q_13: »\n",
      "      »\n",
      "q_14: »\n",
      "      »\n",
      "«      ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐\n",
      "« q_0: ┤0                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_1: ┤1                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_2: ┤2                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_3: ┤3                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_4: ┤4                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_5: ┤5                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_6: ┤6                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_7: ┤7  ZFeatureMap(1.166,3.027,2.3217,1.8902,0.45993,0.46891,0.14853,2.714,1.8966,2.1819,0.036365,3.0901,2.6938,0.65691,0.53104) ├\n",
      "«      │                                                                                                                             │\n",
      "« q_8: ┤8                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "« q_9: ┤9                                                                                                                            ├\n",
      "«      │                                                                                                                             │\n",
      "«q_10: ┤10                                                                                                                           ├\n",
      "«      │                                                                                                                             │\n",
      "«q_11: ┤11                                                                                                                           ├\n",
      "«      │                                                                                                                             │\n",
      "«q_12: ┤12                                                                                                                           ├\n",
      "«      │                                                                                                                             │\n",
      "«q_13: ┤13                                                                                                                           ├\n",
      "«      │                                                                                                                             │\n",
      "«q_14: ┤14                                                                                                                           ├\n",
      "«      └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "/tmp/ipykernel_2047/485953079.py:352: DeprecationWarning: The class ``qiskit.circuit.library.data_preparation._z_feature_map.ZFeatureMap`` is deprecated as of Qiskit 2.1. It will be removed in Qiskit 3.0. Use the z_feature_map function as a replacement. Note that this will no longer return a BlueprintCircuit, but just a plain QuantumCircuit.\n",
      "  fmap = ZFeatureMap(feature_dimension=n_features, reps=reps)\n"
     ]
    }
   ],
   "execution_count": 6,
   "id": "dmwKyBBuKf0X"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "uTmDYKgeKf0Y"
   },
   "source": "## 5. Örnek 2: Düşük Qubit Cihaz + Amplitude Encoding",
   "id": "uTmDYKgeKf0Y"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "IZlVz4PgKf0Y",
    "executionInfo": {
     "status": "ok",
     "timestamp": 1788772869673,
     "user_tz": -180,
     "elapsed": 41,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "6956e39c-741e-400f-9c89-c732149ddcf7"
   },
   "source": "pipeline2 = QuantumAppPipeline()\n\n(pipeline2\n .select_data_type(\"csv\")\n .load_data(\"dummy_data.csv\")\n .select_device(\"ionq_aria\")         # sadece 25 qubit\n)\n\nreport2 = pipeline2.analyze_and_recommend()\nprint(\"--- IonQ Aria Önerisi ---\")\nfor k, v in report2.items():\n    print(f\"{k:30s}: {v}\")\n\nqc2 = pipeline2.encode()\npipeline2.summary()",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "[Pipeline] Veri tipi seçildi: csv\n",
      "[Pipeline] Veri yüklendi. Şekil: (100, 15)\n",
      "[Pipeline] Cihaz seçildi: IonQ Aria (max 25 qubit, tip: trapped-ion)\n",
      "[Pipeline] Öneri → Encoding: angle, Qubit: 15\n",
      "--- IonQ Aria Önerisi ---\n",
      "data_type                     : csv\n",
      "n_features_original           : 15\n",
      "device                        : IonQ Aria\n",
      "device_max_qubits             : 25\n",
      "recommended_qubits            : 15\n",
      "recommended_encoding          : angle\n",
      "angle_qubits_needed           : 15\n",
      "amplitude_qubits_needed       : 4\n",
      "is_feasible_without_pca       : True\n",
      "pca_required                  : False\n",
      "[Pipeline] Circuit üretildi: 15 qubit, depth≈1\n",
      "\n",
      "============================================================\n",
      "QUANTUM APPLICATION PIPELINE - ÖZET\n",
      "============================================================\n",
      "Veri Tipi          : csv\n",
      "Veri Şekli         : (100, 15)\n",
      "Hedef Cihaz        : IonQ Aria\n",
      "Cihaz Max Qubit    : 25\n",
      "Önerilen Qubit     : 15\n",
      "Encoding Yöntemi   : angle\n",
      "Circuit Qubit      : 15\n",
      "Circuit Depth      : 1\n",
      "============================================================\n"
     ]
    },
    {
     "output_type": "stream",
     "name": "stderr",
     "text": [
      "/tmp/ipykernel_2047/485953079.py:352: DeprecationWarning: The class ``qiskit.circuit.library.data_preparation._z_feature_map.ZFeatureMap`` is deprecated as of Qiskit 2.1. It will be removed in Qiskit 3.0. Use the z_feature_map function as a replacement. Note that this will no longer return a BlueprintCircuit, but just a plain QuantumCircuit.\n",
      "  fmap = ZFeatureMap(feature_dimension=n_features, reps=reps)\n"
     ]
    }
   ],
   "execution_count": 7,
   "id": "IZlVz4PgKf0Y"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "cJReGrqGKf0Z"
   },
   "source": "## 6. Örnek 3: Resim Verisi (Simüle)\n\nColab'da gerçek resim yüklemek istersen sol menüden dosya yükleyebilirsin.",
   "id": "cJReGrqGKf0Z"
  },
  {
   "cell_type": "code",
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 621
    },
    "id": "ScGRzzecKf0a",
    "executionInfo": {
     "status": "error",
     "timestamp": 1788772873659,
     "user_tz": -180,
     "elapsed": 139,
     "user": {
      "displayName": "Joseph Volkan ÖZCAN",
      "userId": "11389530967736397480"
     }
    },
    "outputId": "9a92fb9d-25ae-4672-c00e-e370719a6f89"
   },
   "source": "from PIL import Image\n\n# Sahte bir resim oluştur (32x32 grayscale)\nfake_img = Image.fromarray(\n    (np.random.rand(64, 64) * 255).astype(np.uint8)\n)\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:30s}: {v}\")\n\nqc3 = pipeline3.encode(encoding=\"amplitude\")  # resim için genelde amplitude tercih edilir\npipeline3.summary()\nprint(qc3.draw(output=\"text\", fold=100))",
   "outputs": [
    {
     "output_type": "stream",
     "name": "stdout",
     "text": [
      "fake_image.png oluşturuldu.\n",
      "[Pipeline] Veri tipi seçildi: image\n",
      "[Pipeline] Veri yüklendi. Şekil: (1, 256)\n",
      "[Pipeline] Cihaz seçildi: Aer Simulator (local) (max 32 qubit, tip: simulator)\n",
      "[Pipeline] Öneri → Encoding: amplitude, Qubit: 8\n",
      "\n",
      "--- Resim Analiz Raporu ---\n",
      "data_type                     : image\n",
      "n_features_original           : 256\n",
      "device                        : Aer Simulator (local)\n",
      "device_max_qubits             : 32\n",
      "recommended_qubits            : 8\n",
      "recommended_encoding          : amplitude\n",
      "angle_qubits_needed           : 256\n",
      "amplitude_qubits_needed       : 8\n",
      "is_feasible_without_pca       : True\n",
      "pca_required                  : False\n"
     ]
    },
    {
     "output_type": "error",
     "ename": "QiskitError",
     "evalue": "'Sum of amplitudes-squared is not 1, but 0.0.'",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mQiskitError\u001b[0m                               Traceback (most recent call last)",
      "\u001b[0;32m/tmp/ipykernel_2047/2942475930.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     21\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{k:30s}: {v}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0mqc3\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpipeline3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mencoding\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"amplitude\"\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# resim için genelde amplitude tercih edilir\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     24\u001b[0m \u001b[0mpipeline3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msummary\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     25\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mqc3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"text\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfold\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m100\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[0;32m/tmp/ipykernel_2047/485953079.py\u001b[0m in \u001b[0;36mencode\u001b[0;34m(self, encoding, n_qubits, pca_components, reps)\u001b[0m\n\u001b[1;32m    335\u001b[0m             \u001b[0mqc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_angle_encode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_qubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    336\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mencoding\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"amplitude\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 337\u001b[0;31m             \u001b[0mqc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_amplitude_encode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_qubits\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    338\u001b[0m         \u001b[0;32melif\u001b[0m \u001b[0mencoding\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"dense\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    339\u001b[0m             \u001b[0mqc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_dense_encode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_qubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/tmp/ipykernel_2047/485953079.py\u001b[0m in \u001b[0;36m_amplitude_encode\u001b[0;34m(self, data, n_qubits)\u001b[0m\n\u001b[1;32m    367\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    368\u001b[0m         \u001b[0mqc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mQuantumCircuit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_qubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"AmplitudeEncoding\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 369\u001b[0;31m         \u001b[0mqc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minitialize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpadded\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_qubits\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    370\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mqc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    371\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/qiskit/circuit/quantumcircuit.py\u001b[0m in \u001b[0;36minitialize\u001b[0;34m(self, params, qubits, normalize)\u001b[0m\n\u001b[1;32m   6827\u001b[0m         \u001b[0mnum_qubits\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mqubits\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6828\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6829\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mInitialize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_qubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnormalize\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mqubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\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   6830\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6831\u001b[0m     def unitary(\n",
      "\u001b[0;32m/usr/local/lib/python3.13/dist-packages/qiskit/circuit/library/data_preparation/initializer.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, params, num_qubits, normalize)\u001b[0m\n\u001b[1;32m     74\u001b[0m             \u001b[0mnormalize\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mWhether\u001b[0m \u001b[0mto\u001b[0m \u001b[0mnormalize\u001b[0m \u001b[0man\u001b[0m \u001b[0minput\u001b[0m \u001b[0marray\u001b[0m \u001b[0mto\u001b[0m \u001b[0ma\u001b[0m \u001b[0munit\u001b[0m \u001b[0mvector\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     75\u001b[0m         \"\"\"\n\u001b[0;32m---> 76\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_stateprep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mStatePreparation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_qubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnormalize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnormalize\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     77\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     78\u001b[0m         \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"initialize\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_stateprep\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnum_qubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_stateprep\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparams\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/qiskit/circuit/library/data_preparation/state_preparation.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, params, num_qubits, inverse, label, normalize)\u001b[0m\n\u001b[1;32m    107\u001b[0m                 \u001b[0mparams\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcomplex128\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mnorm\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    108\u001b[0m             \u001b[0;32melif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mmath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnorm\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mabs_tol\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0m_EPS\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[0;32m--> 109\u001b[0;31m                 \u001b[0;32mraise\u001b[0m \u001b[0mQiskitError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Sum of amplitudes-squared is not 1, but {norm}.\"\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    110\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    111\u001b[0m         \u001b[0mnum_qubits\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_num_qubits\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_qubits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mQiskitError\u001b[0m: 'Sum of amplitudes-squared is not 1, but 0.0.'"
     ]
    }
   ],
   "execution_count": 8,
   "id": "ScGRzzecKf0a"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "9dcMzwVxKf0b"
   },
   "source": "## 7. Encoding Yöntemlerini Manuel Seçme",
   "id": "9dcMzwVxKf0b"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "89Yyg4oOKf0c"
   },
   "source": "pipeline4 = QuantumAppPipeline()\n\n(pipeline4\n .select_data_type(\"csv\")\n .load_data(\"dummy_data.csv\")\n .select_device(\"simulator\")\n)\n\nprint(\"=== Angle Encoding ===\")\nqc_angle = pipeline4.encode(encoding=\"angle\", n_qubits=8, reps=2)\nprint(f\"Qubit: {qc_angle.num_qubits}, Depth: {qc_angle.depth()}\")\n\nprint(\"\\n=== Dense (ZZ) Encoding ===\")\nqc_dense = pipeline4.encode(encoding=\"dense\", n_qubits=6, reps=2)\nprint(f\"Qubit: {qc_dense.num_qubits}, Depth: {qc_dense.depth()}\")\n\nprint(\"\\n=== Amplitude Encoding ===\")\nqc_amp = pipeline4.encode(encoding=\"amplitude\", n_qubits=4)\nprint(f\"Qubit: {qc_amp.num_qubits}, Depth: {qc_amp.depth()}\")",
   "outputs": [],
   "execution_count": null,
   "id": "89Yyg4oOKf0c"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "EGKXdRrmKf0c"
   },
   "source": "## 8. Circuit'i Statevector Olarak İnceleme",
   "id": "EGKXdRrmKf0c"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "2BmQUvN1Kf0c"
   },
   "source": "from qiskit.quantum_info import Statevector\n\nsv = Statevector.from_instruction(qc_amp)\nprint(\"Statevector boyutu:\", len(sv.data))\nprint(\"İlk 8 amplitude:\")\nprint(np.round(sv.data[:8], 4))",
   "outputs": [],
   "execution_count": null,
   "id": "2BmQUvN1Kf0c"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "8Gxsc1wCKf0d"
   },
   "source": "## 9. Kendi Verinle Kullanım Şablonu\n\nAşağıdaki hücreyi kopyalayıp kendi dosyanla çalıştırabilirsin.",
   "id": "8Gxsc1wCKf0d"
  },
  {
   "cell_type": "code",
   "metadata": {
    "id": "39Bg-rpsKf0d"
   },
   "source": "# ============================================================\n# KENDİ VERİN İÇİN ŞABLON\n# ============================================================\n\nmy_pipeline = QuantumAppPipeline()\n\n# 1. Veri tipini seç: \"csv\" | \"image\" | \"video\" | \"geospatial\"\nmy_pipeline.select_data_type(\"csv\")\n\n# 2. Veriyi yükle (Colab'da sol menüden dosya yükle, sonra yolunu yaz)\nmy_pipeline.load_data(\"dummy_data.csv\")          # ← burayı değiştir\n\n# 3. Cihaz seç\nmy_pipeline.list_devices()\nmy_pipeline.select_device(\"simulator\")           # ← burayı değiştir\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=6)  # manuel\n\nmy_pipeline.summary()\nprint(qc.draw(output=\"text\", fold=120))",
   "outputs": [],
   "execution_count": null,
   "id": "39Bg-rpsKf0d"
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "sTKbBP3cKf0e"
   },
   "source": "---\n\n### Notlar\n\n- **Colab'da dosya yükleme**: Sol menüdeki klasör ikonundan `Upload` ile CSV / resim / video yükleyebilirsin.\n- **Gerçek IBM Quantum** kullanmak istersen `qiskit-ibm-runtime` ile token eklemen gerekir.\n- Büyük resim/video için mutlaka `resize` parametresini küçük tut (örn. 16x16 veya 32x32).\n- Qubit limiti aşılırsa pipeline otomatik olarak **PCA** uygular.\n\nİyi çalışmalar! 🚀",
   "id": "sTKbBP3cKf0e"
  }
 ]
}