{ "cells": [ { "cell_type": "markdown", "id": "7fb27b941602401d91542211134fc71a", "metadata": {}, "source": [ "# Kernel Methods with MerLin\n", "\n", "This notebook illustrates how to build photonic feature maps and quantum kernels using MerLin.\n", "We cover the quickstart factory, custom circuits, and how to plug the resulting Gram matrices\n", "into classical machine-learning pipelines built around the Iris dataset.\n" ] }, { "cell_type": "markdown", "id": "acae54e37e7d407bbb7b55eff062a284", "metadata": {}, "source": [ "## Setup\n", "\n", "We standardise the Iris features, split train/test partitions, and rely on scikit-learn to\n", "train classical models on the precomputed kernel matrices.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "9a63283cbaf04dbcab1f6479b197f3a8", "metadata": { "ExecuteTime": { "end_time": "2025-11-10T09:12:58.373465300Z", "start_time": "2025-11-10T09:12:53.188283900Z" } }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import perceval as pcvl\n", "import torch\n", "from sklearn.datasets import load_iris\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.svm import SVC\n", "\n", "from merlin import ComputationSpace\n", "from merlin.algorithms.kernels import FeatureMap, FidelityKernel\n", "from merlin.builder import CircuitBuilder\n", "\n", "torch.manual_seed(0)\n", "np.random.seed(0)\n", "\n", "iris = load_iris()\n", "X = iris.data.astype(np.float32)\n", "y = iris.target\n", "\n", "X = StandardScaler().fit_transform(X)\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, test_size=0.3, stratify=y, random_state=12\n", ")\n", "\n", "X_train = torch.tensor(X_train)\n", "X_test = torch.tensor(X_test)\n" ] }, { "cell_type": "markdown", "id": "8dd0d8092fe74a7c96281538738b07e2", "metadata": {}, "source": [ "## Fidelity kernel in a few lines\n", "\n", "`FeatureMap.simple` constructs a kernel-ready photonic circuit. Pass it to `FidelityKernel`\n", "to encode real inputs into a multi-mode Fock space, evaluate their overlaps, and\n", "return a positive-semidefinite Gram matrix.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "72eea5119410473aa328ad9291626812", "metadata": { "ExecuteTime": { "end_time": "2025-11-10T09:12:58.735162800Z", "start_time": "2025-11-10T09:12:58.376533Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Gram shape: torch.Size([105, 105])\n", "Test Gram shape: torch.Size([45, 105])\n" ] } ], "source": [ "feature_map = FeatureMap.simple(input_size=4) # n_modes = input_size + 1 = 5 by default\n", "kernel = FidelityKernel(\n", " feature_map=feature_map,\n", " input_state=[1, 0, 1, 0, 1], # alternating photons for 5 modes\n", " shots=0, # exact probabilities\n", " computation_space=ComputationSpace.FOCK,\n", " dtype=torch.float32,\n", " device=torch.device(\"cpu\"),\n", ")\n", "\n", "K_train = kernel(X_train)\n", "K_test = kernel(X_test, X_train)\n", "\n", "print(\"Train Gram shape:\", K_train.shape)\n", "print(\"Test Gram shape:\", K_test.shape)" ] }, { "cell_type": "markdown", "id": "8edb47106e1a46a883d545849b8ab81b", "metadata": {}, "source": [ "### Use with scikit-learn\n", "\n", "We can train any estimator that accepts precomputed kernels. Below we use an SVM\n", "to distinguish the three Iris species from the quantum kernel features.\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "10185d26023b46108eb7d9f57d49d2b3", "metadata": { "ExecuteTime": { "end_time": "2025-11-10T09:12:58.747107500Z", "start_time": "2025-11-10T09:12:58.735162800Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SVM accuracy (precomputed kernel): 1.000\n" ] } ], "source": [ "svc = SVC(kernel=\"precomputed\")\n", "svc.fit(K_train.detach().numpy(), y_train)\n", "test_accuracy = svc.score(K_test.detach().numpy(), y_test)\n", "print(f\"SVM accuracy (precomputed kernel): {test_accuracy:.3f}\")" ] }, { "cell_type": "markdown", "id": "445376290edb44eea7c585e6f130fd0a", "metadata": {}, "source": [ "### Decision regions on a 2D Iris feature slice\n", "\n", "The classifier is trained on the four standardized Iris features, so the true decision frontier\n", "lives in four dimensions. To visualize a 2D slice, we vary petal length and petal width while\n", "keeping the other standardized features fixed at zero.\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "560d22354fae455abbf65c2584367da8", "metadata": {}, "outputs": [ { "data": { "image/png": "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5IUXXlD1B3F8+vbtK7f/fwhBc1q0aJHuvfPGG2+IN5g1a5aULl1acubMKQ0aNJC9e/dafPyKFSukUqVK6vHVqlWTX3/9VbyVPcdm/vz56d4jWM4bbd26VZ5++mlV6B37uWbNGqvLbN68WWrXrq0665QvX14dL29l7/HBsTF+7+AWExMj3mbChAlSr149NUBTaGiodOrUSU6ePGl1OU897zCIJZOSkpKka9eu0r9/f7uOEILW6Oho/e2HH37wuiOckWPz2WefyfTp02X27NmyZ88eyZMnj7Rv317u378v3gYB7F9//SXr16+XX375RX3hvP7661aXe+2119K8d3DMPN2yZcvk7bffVj2BDx48KDVq1FCve1xcnMnH79y5U3r06KEC/0OHDqkvINz+/PNP8Tb2HhvADyPD98g///wj3ujOnTvqeCDIt8X58+flySeflJYtW8rhw4dl6NCh8uqrr8ratWvFG9l7fDQI5gzfPwjyvM2WLVtkwIABsnv3bnUOfvjwobRr104dM3M8+ryDYWeJzJk3b54uODjYpgPUu3dv3TPPPOMzB9PWY5OamqorUqSIbtKkSfppt27d0uXIkUP3ww8/6LzJ33//jWGsdfv27dNP++2333R+fn66y5cvm12uefPmuiFDhui8Tf369XUDBgzQ309JSdEVLVpUN2HCBJOPf/7553VPPvlkmmkNGjTQ9evXT+frx8aec5E3wecpMjLS4mPee+893aOPPppmWrdu3XTt27fXeTtbjs+mTZvU427evKnzNXFxcWrft2zZYvYxnnzeYUssORQu2+DXbcWKFVVL5fXr133+CKOVBJetkEJgOJweLp/u2rXLq44P9gcpBHXr1tVPw35j+Ga0QFuyePFiKVSokFStWlUiIiLk7t274ukt9gcOHEjzuuM44L651x3TDR8PaJ30tvdJRo4NIC2lVKlSatz3Z555RrX4k++8bzKrZs2aKqWrbdu2smPHDvEF8fHx6v8CBQp45fsnwNUbQN4DqQRdunSRMmXKyNmzZ+X999+XJ554Qn0Q/P39xVdpeVdhYWFppuO+t+VkYX+ML9EFBASoE6ilfe3Zs6cKTpDjdvToURk+fLi69Ld69WrxVNeuXZOUlBSTr/uJEydMLoNj5Avvk4wcG/wwnjt3rlSvXl19MX/++ecqNx2BbPHixcWXmXvfJCQkyL1791Qevi9D4IpULvy4fvDggcyZM0fl4eOHNfKIvVVqaqpKLWnSpIlqHDDHk887DGJ9yIgRI2TixIkWH3P8+HGV3J0R3bt31/+NxHB82ZQrV061zrZu3Vp8+dh4OluPT0YZ5szivYMvHbxn8GMI7yGiRo0aqZsGAWzlypXl66+/lnHjxvEAkVn4AYSb4XsH55YpU6bIwoULvfbIDRgwQOW1bt++XbwVg1gfMmzYMFVBwJKyZcs67PmwLlwePnPmjNsHsc48NkWKFFH/x8bGquBMg/u4vOUJbD0+2FfjjjnJycmqYoF2HGyBVAvAe8dTg1i893EFAq+zIdw3dyww3Z7He6qMHBtj2bNnl1q1aqn3iK8z975BRzhfb4U1p379+l4d3A0cOFDfsdbalQpPPu8wiPUhhQsXVrescunSJZUTaxi4+eKxQXoFTgYbNmzQB624zIdLWfZWf3D344OWslu3bql8xzp16qhpGzduVJe1tMDUFuhhDZ7w3jEnMDBQHQO87ujpCzgOuI8vGHPHD/NxCVCDHsaGLZDeICPHxhjSEY4dOyYdOnQQX4f3h3FJJG983zgSzjGefH4xR6fTyaBBgyQyMlJdBcX3jzUefd5xdc8yck///POP7tChQ7oxY8bo8ubNq/7GLTExUf+YihUr6lavXq3+xvR33nlHt2vXLt358+d1f/zxh6527dq6ChUq6O7fv6/z5WMDn376qS4kJET3448/6o4ePaqqOJQpU0Z37949nbd5/PHHdbVq1dLt2bNHt337dvUe6NGjh37+pUuX1PHBfDhz5oxu7Nixuv3796v3Do5R2bJldc2aNdN5uqVLl6oqFPPnz1eVG15//XX1PoiJiVHzX3rpJd2IESP0j9+xY4cuICBA9/nnn+uOHz+uGz16tC579uy6Y8eO6byNvccGn7e1a9fqzp49qztw4ICue/fuupw5c+r++usvnbfBuUQ7r+BrevLkyepvnHsAxwXHR3Pu3Dld7ty5de+++65638yaNUvn7++v+/3333XeyN7jM2XKFN2aNWt0p0+fVp8lVELJli2b+p7yNv3791dVPDZv3qyLjo7W3+7evat/jDeddxjEktlyWTg5GN9QqkT/5hFRZW8AH5B27drpChcurN78pUqV0r322mv6LyRfPjZama2RI0fqwsLC1Bd369atdSdPntR5o+vXr6ugFQF+UFCQ7uWXX04T4CNQNTxeFy9eVAFrgQIF1LEpX768+jKOj4/XeYMZM2boSpYsqQsMDFRlpXbv3p2mtBjeT4aWL1+ue+SRR9TjUTbpf//7n85b2XNshg4dqn8sPkcdOnTQHTx4UOeNtJJQxjfteOB/HB/jZWrWrKmOD34EGp5/fP34TJw4UVeuXDn1owfnmRYtWug2btyo80Zi4rgYfx9503nHD/+4ujWYiIiIiMgerBNLRERERB6HQSwREREReRwGsURERETkcRjEEhEREZHHYRBLRERERB6HQSwREREReRwGsURERETkcRjEEhEREZHHYRBLRB7twoUL4ufnp8ZCd/a6MRY57t+6dUuc5aOPPpKaNWuKu2rRokWaMdbdffvxeq1Zs8bu5U6ePClFihSRxMREcZa///5bihcvLnfu3HHacxB5MwaxRGSXq1evSv/+/aVkyZKSI0cO9UXfvn172bFjR6YDB3fXuHFjiY6OluDgYPF0pUuXlqlTp4q3cHTwHBERIYMGDZJ8+fKJs1SpUkUaNmwokydPdtpzEHkzBrFEZJdnn31WDh06JAsWLJBTp07JTz/9pFrnrl+/7rFHMikpyabHBQYGqqAdQTp5r4sXL8ovv/wiffr0cfpzvfzyy/LVV19JcnKy05+LyNswiCUim+Ey+rZt22TixInSsmVLKVWqlNSvX1+1WnXs2FHfwgedO3dWwZ52/+zZs/LMM89IWFiY5M2bV+rVqyd//PFHmvXjsZ988om88sorqgUMrb3ffPNNmsfs3btXatWqJTlz5pS6deuqgNpQSkqK9O3bV8qUKSO5cuWSihUryrRp09I8BsFJp06dZPz48VK0aFH1GFvWbZxOgOAd941vSEPQjterr74qhQsXlqCgIGnVqpUcOXIkzTo//fRTdUywv9ju+/fvW3wNtG343//+J9WrV1fbita8P//8M83jtm/fLk2bNlXHoESJEjJ48GD9ZWts9z///CNvvfWWfpsBP0R69OghxYoVk9y5c0u1atXkhx9+kMyaM2eOVK5cWW1rpUqV5Msvv0yXsrF69Wr1nsLz1qhRQ3bt2pVmHd9++63aD8zHewutlyEhIWre/PnzZcyYMerYavuDaZpr166pZbBshQoV1A8vS5YvX662AcfBEK424NhhPfnz51dXIG7evKk/pmi5RaoF5uE1xTbjmCNQxetbvnx5+e2339Kss23btnLjxg3ZsmVLJo4wkY/SERHZ6OHDh7q8efPqhg4dqrt//77Jx8TFxelwapk3b54uOjpa3YfDhw/rZs+erTt27Jju1KlTug8//FCXM2dO3T///KNftlSpUroCBQroZs2apTt9+rRuwoQJumzZsulOnDih5icmJuoKFy6s69mzp+7PP//U/fzzz7qyZcuq5zt06JB6TFJSkm7UqFG6ffv26c6dO6dbtGiRLnfu3Lply5bpn6d3795qP1566SW1HtxsWfemTZvU/Zs3b6r7169fV/uo3bp06aKrWLGi7u7du2p+mzZtdE8//bTaFuzzsGHDdAULFlTLAbYpR44cujlz5qh9/OCDD3T58uXT1ahRw+xroG1D5cqVdevWrdMdPXpU99RTT+lKly6t9h3OnDmjy5Mnj27KlCnqeXfs2KGrVauWrk+fPvrtLl68uG7s2LH6bYdLly7pJk2apPb37NmzuunTp+v8/f11e/bs0T9/8+bNdUOGDDG7faNHj06z/Tj+4eHhulWrVqnXA//jNZ4/f76af/78ebU/lSpV0v3yyy+6kydP6p577jn1XsD7DbZv367eB9g2zMf7A+sIDg5W83G8cWwfffRR/f5orwHWjX1dsmSJek8NHjxYvfbaa2BKx44ddW+88UaaaTgmeK369++v3st4j8yYMUN39epV/XHBazdu3Dh1zPE/jt0TTzyh++abb9Q0LIvX/86dO2nW3aBBA3XciMg+DGKJyC4rV67U5c+fXwWgjRs31kVEROiOHDmS9sQioouMjLS6LgQdCAQ0CFxefPFF/f3U1FRdaGio7quvvlL3v/76axUE3Lt3T/8YzDMMNE0ZMGCA7tlnn00TxIaFhekePHign2bLuo2DWEOTJ0/WhYSEqCALtm3bpgsKCkoX7JcrV049FzRq1Ej35ptvpgtobAlily5dqp+GgCxXrlz6QL1v3766119/Pc1y2B4Egtr+4VgjyLXmySefVAFiRoNY7C8CSEMI8LDvhkEsAnnNX3/9paYdP35c3e/WrZvaDkMvvPCCPog19bwarAc/mDS3b99W03777Tez+4D1IMA31KNHD12TJk3MLoPj8thjj+nvJycnqx8S+KGkQXCN5961a1eaZTt37qz/gUFEtmM6ARHZnRN75coVdUn28ccfV5e3a9eunebyrSm3b9+Wd955R11WxmVgpBQcP35c5R8awiVyDS4LIwc1Li5O3cfjtUvomkaNGqV7rlmzZkmdOnXUZXw8D1ISjJ8Hl8qR46qxdd2m4BLxiBEjZNmyZfLII4+oabi0jX0uWLCg2gbtdv78eZVaoT1ngwYN0qzL1uc0fFyBAgVUSgTWpz03Xg/D58Wl79TUVPX85iAVY9y4cerYYJ1Ybu3atemOna1wKR37ijQJw235+OOP9cfA1OseHh6u/tded1QKQNqKIeP7lhiuO0+ePCq1Q1u3Kffu3UvzPgBUqGjdurXNz+Pv769eexxLDVIMDPdLg5SPu3fv2rw/RPSvgP//n4jIZviCRy4fbiNHjlR5n6NHj7bYEQYB7Pr16+Xzzz9XuYH44n7uuefSdarKnj17mvsIZBF82Wrp0qXqub744gsV6CEXcdKkSbJnz540j0Mw46gySd27d1e5re3atdNPRwCLYAxBvjEtl9NZ8Nz9+vVTebDGkGdsDo4T8odRtQDBF44Rcjxt7fhmajsAuaHGwTqCPHOvu5aja8/rbom976lChQrpc101eL9m5Hls2S/kxJYrV87q+okoLQaxROSQUkGGJbXwxY1WPeNOMQhy0cFGC3C0DlC2QivuwoULVecnraVs9+7d6Z4HpbDefPNN/TTjVr+MrtsYOgw9/fTTqnUanaQMoXU6JiZGAgIC9J3bTD0ngutevXrpp1l7TsPHaQEpAi5UisD6tOdGcI0fC+agFdrUa4TOdy+++KI+2MJ68fpmBFoe0XHu3Llz8sILL0hGoZV53759aaYZ3ze1PxmFzn04fsatrBs2bFAdyBwNnfLwg46I7MN0AiKyGXqvo4f9okWL5OjRo+rS9IoVK+Szzz5TwY8GQRu+8BHEaS1a6BWOHui4LIvL3T179rS7pQ3LoDXrtddeU0HGr7/+qlp2DeF59u/fry6DIwBDS7FxwJPRdRtD8Iqe6qhRin3Vbgim2rRpo1qCUQVh3bp1KmDfuXOnfPDBB2r7YMiQITJ37lyZN2+e2la0Zv/11182HYuxY8eqY4wACD8O0HqI54Lhw4er5xo4cKA63qdPn5Yff/xR3Td8jbZu3SqXL19Wwbh27NBajmWRmoDW3NjYWMkMBH0TJkyQ6dOnq308duyY2l97aqOi1z9eDyyDffn6669VCodhqTPsD96P2F/sz4MHDzK8zUi9QHUEw6AYFTjwPsKPI7z3T5w4oUpjaccuo/C+wGuA9wsR2YdBLBHZDPmMuCw8ZcoUadasmVStWlUFiQj8Zs6cqX8cLuUjGEJJJLRqAQIQlB5CKylaLxEooMXQ3uf/+eefVSCE9SIgRLkvQwi8unTpIt26dVPbisDbsFU2M+s2hiAQQSRKjSF1QLtFRUWpAAuBF44TSiwhVxZpByhtpeVGYhtx/N577z2Vw4t5GEjCFkhfQBCM5RA4Y9u1HF+0GqJkE4JGlNnC/owaNUq1ihoGwQigcBkbucPw4YcfqtcErw1KRiEfWQuMMwqpJiixhcAVKQrNmzdX+boogWarJk2ayOzZs9V7CKWvfv/9d9XybZi3ih8UyNFGmS7sT2ZKgz3xxBOqBd2wBBxeP/wYwQ8w5OPiBwp+GOBxmYHtRBoK3kNEZB8/9O6ycxkiInIR5NgiUEMLt7Nza90ZfjihNRR1i50BnQPReREt+s6CXGO0fi9ZskQF6kRkH+bEEhGR20NqBzoSorMZUgkwYpzhoAmOhhZ9DFaRmJjotKFnUfXh/fffZwBLlEFsiSUi8iC+2hL7/PPPq31HUFm2bFmVJ/vGG2+4erOIyIUYxBIRERGRx2HHLiIiIiLyOAxiiYiIiMjjMIglIiIiIo/DIJaIiIiIPA6DWCIiIiLyOAxiiYiIiMjjMIglIiIiIo/DIJaIiIiIPA6DWCIiIiIST/N/RXfvBYic0igAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x_feature_index = 2\n", "y_feature_index = 3\n", "slice_mesh_resolution = 50\n", "\n", "X_train_numpy = X_train.detach().numpy()\n", "x_feature_min = X_train_numpy[:, x_feature_index].min() - 0.5\n", "x_feature_max = X_train_numpy[:, x_feature_index].max() + 0.5\n", "y_feature_min = X_train_numpy[:, y_feature_index].min() - 0.5\n", "y_feature_max = X_train_numpy[:, y_feature_index].max() + 0.5\n", "\n", "xx, yy = np.meshgrid(\n", " np.linspace(x_feature_min, x_feature_max, slice_mesh_resolution),\n", " np.linspace(y_feature_min, y_feature_max, slice_mesh_resolution),\n", ")\n", "grid_points = np.zeros((xx.size, X_train_numpy.shape[1]), dtype=np.float32)\n", "grid_points[:, x_feature_index] = xx.ravel()\n", "grid_points[:, y_feature_index] = yy.ravel()\n", "\n", "with torch.no_grad():\n", " K_grid = kernel(torch.tensor(grid_points), X_train)\n", "\n", "decision_regions = svc.predict(K_grid.detach().numpy()).reshape(xx.shape)\n", "\n", "fig, ax = plt.subplots(figsize=(7, 5))\n", "region_levels = np.arange(len(iris.target_names) + 1) - 0.5\n", "ax.contourf(xx, yy, decision_regions, levels=region_levels, cmap=\"Pastel2\", alpha=0.8)\n", "\n", "for class_id, species_name in enumerate(iris.target_names):\n", " class_mask = y_train == class_id\n", " ax.scatter(\n", " X_train_numpy[class_mask, x_feature_index],\n", " X_train_numpy[class_mask, y_feature_index],\n", " label=species_name,\n", " edgecolor=\"black\",\n", " linewidth=0.6,\n", " s=45,\n", " )\n", "\n", "ax.set_xlabel(f\"Standardized {iris.feature_names[x_feature_index]}\")\n", "ax.set_ylabel(f\"Standardized {iris.feature_names[y_feature_index]}\")\n", "ax.set_title(\"Quantum-kernel SVM decision regions on an Iris feature slice\")\n", "ax.legend(title=\"Species\")\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "8763a12b2bbd4a93a75aff182afb95dc", "metadata": {}, "source": [ "## Custom feature maps and experiments\n", "\n", "For full control over the optical layout, detectors, and noise, build a `perceval.Circuit`\n", "and wrap it with `FeatureMap`. Fidelity kernels then evaluate overlaps between the resulting states.\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "7623eae2785240b9bd12b16a66d81610", "metadata": { "ExecuteTime": { "end_time": "2025-11-10T09:12:58.807489700Z", "start_time": "2025-11-10T09:12:58.747107500Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Custom kernel Gram shape: torch.Size([20, 20])\n" ] } ], "source": [ "circuit = pcvl.Circuit(4)\n", "circuit.add((0, 1), pcvl.BS())\n", "circuit.add(0, pcvl.PS(pcvl.P(\"phi0\")))\n", "circuit.add(1, pcvl.PS(pcvl.P(\"phi1\")))\n", "circuit.add(2, pcvl.PS(pcvl.P(\"phi2\")))\n", "circuit.add(3, pcvl.PS(pcvl.P(\"phi3\")))\n", "circuit.add((2, 3), pcvl.BS())\n", "\n", "experiment = pcvl.Experiment(circuit)\n", "experiment.noise = pcvl.NoiseModel(brightness=0.93)\n", "\n", "feature_map = FeatureMap(\n", " experiment=experiment,\n", " input_size=4,\n", " input_parameters=\"phi\",\n", " dtype=torch.float32,\n", ")\n", "\n", "custom_kernel = FidelityKernel(\n", " feature_map=feature_map,\n", " input_state=[1, 0, 1, 0],\n", " computation_space=ComputationSpace.UNBUNCHED,\n", ")\n", "\n", "K_custom = custom_kernel(X_train[:20])\n", "print(\"Custom kernel Gram shape:\", K_custom.shape)" ] }, { "cell_type": "markdown", "id": "7cdc8c89c7104fffa095e18ddfef8986", "metadata": {}, "source": [ "## Declarative kernel circuits\n", "\n", "`CircuitBuilder` offers a fluent API to assemble reusable feature maps programmatically.\n", "Build the circuit, wrap it with `FeatureMap`, then pass it to `FidelityKernel`.\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "b118ea5561624da68c537baed56e602f", "metadata": { "ExecuteTime": { "end_time": "2025-11-10T09:12:59.286965200Z", "start_time": "2025-11-10T09:12:58.775409200Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Builder kernel Gram shape: torch.Size([15, 15])\n" ] } ], "source": [ "builder = CircuitBuilder(n_modes=6)\n", "builder.add_superpositions(depth=1)\n", "builder.add_angle_encoding(modes=[0, 1, 2, 3], name=\"input\", scale=0.7)\n", "builder.add_rotations(trainable=True, name=\"theta\")\n", "builder.add_superpositions(depth=1)\n", "\n", "feature_map = FeatureMap(\n", " builder=builder,\n", " input_size=4,\n", " input_parameters=None,\n", " trainable_parameters=[\"theta\"],\n", ")\n", "\n", "builder_kernel = FidelityKernel(\n", " feature_map=feature_map,\n", " input_state=[1, 1, 0, 0, 0, 0],\n", " shots=512,\n", " computation_space=ComputationSpace.FOCK,\n", ")\n", "\n", "K_builder = builder_kernel(X_train[:15])\n", "print(\"Builder kernel Gram shape:\", K_builder.shape)\n" ] }, { "cell_type": "markdown", "id": "938c804e27f84196a10c8828c723f798", "metadata": {}, "source": [ "## Conclusion\n", "\n", "- Use `FeatureMap.simple` then pass to `FidelityKernel` for quick experiments with a default photonic layout.\n", "- Wrap custom `perceval.Experiment` objects with `FeatureMap` to reflect hardware noise and detector choices.\n", "- Use `CircuitBuilder` to script repeatable feature maps with entangling blocks and measurement strategies, then pass to `FeatureMap` and `FidelityKernel`.\n", "- The resulting Gram matrices integrate with classical ML libraries by choosing the `precomputed` kernel option.\n" ] } ], "metadata": { "kernelspec": { "display_name": "venv-0.4", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.7" } }, "nbformat": 4, "nbformat_minor": 5 }