{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "SzKwuqYESWwm"
},
"source": [
"##### Copyright 2021 The Cirq Developers"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"cellView": "form",
"execution": {
"iopub.execute_input": "2024-10-18T09:49:58.199917Z",
"iopub.status.busy": "2024-10-18T09:49:58.199295Z",
"iopub.status.idle": "2024-10-18T09:49:58.203292Z",
"shell.execute_reply": "2024-10-18T09:49:58.202668Z"
},
"id": "4yPUsdJxSXFq"
},
"outputs": [],
"source": [
"#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n",
"# you may not use this file except in compliance with the License.\n",
"# You may obtain a copy of the License at\n",
"#\n",
"# https://www.apache.org/licenses/LICENSE-2.0\n",
"#\n",
"# Unless required by applicable law or agreed to in writing, software\n",
"# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
"# See the License for the specific language governing permissions and\n",
"# limitations under the License."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zC1qlUJoSXhm"
},
"source": [
"
"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:49:58.205918Z",
"iopub.status.busy": "2024-10-18T09:49:58.205704Z",
"iopub.status.idle": "2024-10-18T09:50:13.424567Z",
"shell.execute_reply": "2024-10-18T09:50:13.423641Z"
},
"id": "bd9529db1c0b"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"installing cirq...\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\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.\r\n",
"tensorflow-metadata 1.16.1 requires protobuf<4.21,>=3.20.3; python_version < \"3.11\", but you have protobuf 4.25.5 which is incompatible.\u001b[0m\u001b[31m\r\n",
"\u001b[0m"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"installed cirq.\n"
]
}
],
"source": [
"try:\n",
" import cirq\n",
"except ImportError:\n",
" print(\"installing cirq...\")\n",
" !pip install --quiet cirq\n",
" print(\"installed cirq.\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dd95be2a71eb"
},
"source": [
"# Isolated XEB\n",
"\n",
"This notebook demonstrates how to use the functionality in `cirq.experiments` to run Isolated XEB end-to-end. \"Isolated\" means we do one pair of qubits at a time."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:13.428296Z",
"iopub.status.busy": "2024-10-18T09:50:13.427538Z",
"iopub.status.idle": "2024-10-18T09:50:15.176310Z",
"shell.execute_reply": "2024-10-18T09:50:15.175553Z"
},
"id": "046b07823210"
},
"outputs": [],
"source": [
"import cirq\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ace31cc4d258"
},
"source": [
"## Set up Random Circuits\n",
"\n",
"We create a library of 20 random, two-qubit `circuits` using the sqrt(ISWAP) gate on the two qubits we've chosen."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:15.180177Z",
"iopub.status.busy": "2024-10-18T09:50:15.179758Z",
"iopub.status.idle": "2024-10-18T09:50:15.300086Z",
"shell.execute_reply": "2024-10-18T09:50:15.299371Z"
},
"id": "03ad48eb554a"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"20\n"
]
}
],
"source": [
"from cirq.experiments import random_quantum_circuit_generation as rqcg\n",
"\n",
"circuits = rqcg.generate_library_of_2q_circuits(\n",
" n_library_circuits=20,\n",
" two_qubit_gate=cirq.ISWAP**0.5,\n",
" q0=cirq.GridQubit(4,4),\n",
" q1=cirq.GridQubit(4,5),\n",
")\n",
"print(len(circuits))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:15.302527Z",
"iopub.status.busy": "2024-10-18T09:50:15.302295Z",
"iopub.status.idle": "2024-10-18T09:50:15.309566Z",
"shell.execute_reply": "2024-10-18T09:50:15.308969Z"
},
"id": "c7c044ec12ac"
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3, 23, 43, 63, 83])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# We will truncate to these lengths\n",
"max_depth = 100\n",
"cycle_depths = np.arange(3, max_depth, 20)\n",
"cycle_depths"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4bf3dbdfac5a"
},
"source": [
"### Set up a `Sampler`.\n",
"\n",
"For demonstration, we'll use a density matrix simulator to sample noisy samples. However, input a `device_name` (and have an authenticated Google Cloud project name set as your `GOOGLE_CLOUD_PROJECT` environment variable) to run on a real device."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:15.312082Z",
"iopub.status.busy": "2024-10-18T09:50:15.311833Z",
"iopub.status.idle": "2024-10-18T09:50:15.316700Z",
"shell.execute_reply": "2024-10-18T09:50:15.316080Z"
},
"id": "f974bb59afb4"
},
"outputs": [],
"source": [
"device_name = None # change me!\n",
"\n",
"if device_name is None:\n",
" sampler = cirq.DensityMatrixSimulator(noise=cirq.depolarize(5e-3))\n",
"else:\n",
" import cirq_google as cg\n",
" sampler = cg.get_engine_sampler(device_name, gate_set_name='sqrt_iswap')\n",
" device = cg.get_engine_device(device_name)\n",
"\n",
" import cirq.contrib.routing as ccr\n",
" graph = ccr.gridqubits_to_graph_device(device.qubits)\n",
" pos = {q: (q.row, q.col) for q in graph.nodes}\n",
" import networkx as nx\n",
" nx.draw_networkx(graph, pos=pos)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bd50664b583a"
},
"source": [
"## Take Data"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:15.319039Z",
"iopub.status.busy": "2024-10-18T09:50:15.318815Z",
"iopub.status.idle": "2024-10-18T09:50:38.230579Z",
"shell.execute_reply": "2024-10-18T09:50:38.229879Z"
},
"id": "a1deda080b5b"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 0%| | 0/108 [00:00, ?it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 8%|▊ | 9/108 [00:00<00:09, 10.18it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 25%|██▌ | 27/108 [00:02<00:08, 9.47it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 33%|███▎ | 36/108 [00:03<00:06, 11.21it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 42%|████▏ | 45/108 [00:06<00:10, 6.14it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 50%|█████ | 54/108 [00:07<00:08, 6.26it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 58%|█████▊ | 63/108 [00:10<00:09, 4.61it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 67%|██████▋ | 72/108 [00:13<00:08, 4.01it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 75%|███████▌ | 81/108 [00:16<00:07, 3.67it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 83%|████████▎ | 90/108 [00:21<00:06, 2.87it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 92%|█████████▏| 99/108 [00:21<00:02, 3.68it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
"100%|██████████| 108/108 [00:22<00:00, 4.83it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
"100%|██████████| 108/108 [00:22<00:00, 4.80it/s]"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" sampled_probs \n",
" timestamp \n",
" pair \n",
" \n",
" \n",
" circuit_i \n",
" cycle_depth \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 3 \n",
" [0.3484, 0.0809, 0.0828, 0.4879] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 1 \n",
" 3 \n",
" [0.5804, 0.3434, 0.045, 0.0312] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 2 \n",
" 3 \n",
" [0.4366, 0.1843, 0.2124, 0.1667] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 3 \n",
" 3 \n",
" [0.325, 0.3871, 0.2353, 0.0526] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 4 \n",
" 3 \n",
" [0.2157, 0.314, 0.2366, 0.2337] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 14 \n",
" 83 \n",
" [0.2217, 0.2459, 0.2149, 0.3175] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 15 \n",
" 83 \n",
" [0.2473, 0.2192, 0.3092, 0.2243] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 16 \n",
" 83 \n",
" [0.2546, 0.2419, 0.2023, 0.3012] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 17 \n",
" 83 \n",
" [0.2564, 0.2176, 0.2198, 0.3062] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 18 \n",
" 83 \n",
" [0.2198, 0.2705, 0.2236, 0.2861] \n",
" 1.729245e+09 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
"
\n",
"
100 rows × 3 columns
\n",
"
"
],
"text/plain": [
" sampled_probs timestamp \\\n",
"circuit_i cycle_depth \n",
"0 3 [0.3484, 0.0809, 0.0828, 0.4879] 1.729245e+09 \n",
"1 3 [0.5804, 0.3434, 0.045, 0.0312] 1.729245e+09 \n",
"2 3 [0.4366, 0.1843, 0.2124, 0.1667] 1.729245e+09 \n",
"3 3 [0.325, 0.3871, 0.2353, 0.0526] 1.729245e+09 \n",
"4 3 [0.2157, 0.314, 0.2366, 0.2337] 1.729245e+09 \n",
"... ... ... \n",
"14 83 [0.2217, 0.2459, 0.2149, 0.3175] 1.729245e+09 \n",
"15 83 [0.2473, 0.2192, 0.3092, 0.2243] 1.729245e+09 \n",
"16 83 [0.2546, 0.2419, 0.2023, 0.3012] 1.729245e+09 \n",
"17 83 [0.2564, 0.2176, 0.2198, 0.3062] 1.729245e+09 \n",
"18 83 [0.2198, 0.2705, 0.2236, 0.2861] 1.729245e+09 \n",
"\n",
" pair \n",
"circuit_i cycle_depth \n",
"0 3 (q(4, 4), q(4, 5)) \n",
"1 3 (q(4, 4), q(4, 5)) \n",
"2 3 (q(4, 4), q(4, 5)) \n",
"3 3 (q(4, 4), q(4, 5)) \n",
"4 3 (q(4, 4), q(4, 5)) \n",
"... ... \n",
"14 83 (q(4, 4), q(4, 5)) \n",
"15 83 (q(4, 4), q(4, 5)) \n",
"16 83 (q(4, 4), q(4, 5)) \n",
"17 83 (q(4, 4), q(4, 5)) \n",
"18 83 (q(4, 4), q(4, 5)) \n",
"\n",
"[100 rows x 3 columns]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from cirq.experiments.xeb_sampling import sample_2q_xeb_circuits\n",
"sampled_df = sample_2q_xeb_circuits(\n",
" sampler=sampler,\n",
" circuits=circuits,\n",
" cycle_depths=cycle_depths,\n",
" repetitions=10_000,\n",
")\n",
"sampled_df"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "99b51deacbe4"
},
"source": [
"## Benchmark fidelities"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:38.233471Z",
"iopub.status.busy": "2024-10-18T09:50:38.233211Z",
"iopub.status.idle": "2024-10-18T09:50:39.204240Z",
"shell.execute_reply": "2024-10-18T09:50:39.203612Z"
},
"id": "3896c772ad49"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" cycle_depth \n",
" fidelity \n",
" pair \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 3 \n",
" 0.924308 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 1 \n",
" 23 \n",
" 0.601038 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 2 \n",
" 43 \n",
" 0.394943 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 3 \n",
" 63 \n",
" 0.261657 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 4 \n",
" 83 \n",
" 0.164821 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" cycle_depth fidelity pair\n",
"0 3 0.924308 (q(4, 4), q(4, 5))\n",
"1 23 0.601038 (q(4, 4), q(4, 5))\n",
"2 43 0.394943 (q(4, 4), q(4, 5))\n",
"3 63 0.261657 (q(4, 4), q(4, 5))\n",
"4 83 0.164821 (q(4, 4), q(4, 5))"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from cirq.experiments.xeb_fitting import benchmark_2q_xeb_fidelities\n",
"fids = benchmark_2q_xeb_fidelities(\n",
" sampled_df=sampled_df,\n",
" circuits=circuits,\n",
" cycle_depths=cycle_depths,\n",
")\n",
"fids"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:39.207298Z",
"iopub.status.busy": "2024-10-18T09:50:39.206654Z",
"iopub.status.idle": "2024-10-18T09:50:39.426674Z",
"shell.execute_reply": "2024-10-18T09:50:39.425620Z"
},
"id": "8c08c9ab8109"
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAG0CAYAAADO5AZFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABy9ElEQVR4nO3dd3hT5f/G8XfSXbopHZSWlr33BgEFBJUhDpyACCggylBxfN0LF4gMBVFZoiwV+SGiCLKX7D3KHm2ZbYHSlZzfH8FghZYW2qbjfl1XL5snzzn5NBF6c84zTIZhGIiIiIgUEWZHFyAiIiKSmxRuREREpEhRuBEREZEiReFGREREihSFGxERESlSFG5ERESkSFG4ERERkSLF2dEF5Der1crJkyfx9vbGZDI5uhwRERHJBsMwuHDhAqVLl8ZszvraTLELNydPniQ8PNzRZYiIiMhNOHbsGGXKlMmyT7ELN97e3oDtzfHx8XFwNSIiIpIdiYmJhIeH23+PZ6XYhZt/bkX5+Pgo3IiIiBQy2RlSogHFIiIiUqQo3IiIiEiRonAjIiIiRUqxG3MjIpLfLBYLaWlpji5DpMBzdXW94TTv7FC4ERHJI4ZhEBsbS3x8vKNLESkUzGYzUVFRuLq63tJ5FG5ERPLIP8EmKCgIT09PLRwqkoV/FtmNiYkhIiLilv68KNyIiOQBi8ViDzYlS5Z0dDkihUKpUqU4efIk6enpuLi43PR5NKBYRCQP/DPGxtPT08GViBQe/9yOslgst3QehRsRkTykW1Ei2Zdbf14UbkRERKRIcWi4Wb58OZ06daJ06dKYTCbmzp17w2OWLl1KvXr1cHNzo0KFCkyePDnP6xQREZHCw6Hh5tKlS9SuXZtx48Zlq/+hQ4e45557uP3229myZQuDBw+mT58+/P7773lcqYiIFCeRkZGMGjUq2/0nT56Mn59fntXzb2+99RbBwcHZvihQHDk03Nx111289957dO3aNVv9x48fT1RUFCNGjKBq1aoMHDiQBx54gM8++yyPK82e6FMXOHTmkqPLEBG5aU888QQmk+marw4dOji6tDyRWSj5+++/eeqpp3L1tf79fvr4+NCwYUN++eWXHJ1j9+7dvP3220yYMIGYmBjuuuuuXK2xqChUY27WrFlD27ZtM7S1b9+eNWvWZHpMSkoKiYmJGb7ywu87Y7ln9EoGz9xCusWaJ68hIpIfOnToQExMTIavH374wdFl5atSpUrlyUy3SZMmERMTw4YNG2jevDkPPPAA27dvz/bxBw4cAKBLly6EhITg5uZ2U3UU9RWzC1W4iY2NJTg4OENbcHAwiYmJXL58+brHDB8+HF9fX/tXeHh4ntRWM8wXV2czW4/FM37ZgTx5DREpvAzDICk13SFfhmHkqFY3NzdCQkIyfPn7+wO2cY+urq6sWLHC3v/jjz8mKCiIuLg4AFq3bs3AgQMZOHAgvr6+BAYG8vrrr2eo4/z58/To0QN/f388PT2566672L9/v/35f66o/P7771StWhUvLy976Pq3r7/+mqpVq+Lu7k6VKlX44osv7M8dPnwYk8nETz/9xO23346npye1a9e2/4N46dKl9OrVi4SEBPsVlbfeegu49rbUyJEjqVmzJiVKlCA8PJwBAwZw8eLFHL2vAH5+foSEhFCpUiXeffdd0tPT+euvv+zPHzt2jG7duuHn50dAQABdunTh8OHDgO12VKdOnQDbSr7/nlmUnfdh5syZtGrVCnd3d6ZPn37L798/Vq1aRevWrfH09MTf35/27dtz/vx5wLYw3/Dhw4mKisLDw4PatWszZ86cHL9vOVXkF/F75ZVXGDp0qP1xYmJingSc0n4evN25OkNnbWXUn/tpXTmIGmG+uf46IlI4XU6zUO0Nx4wP3PVOezxdc+ev+9atWzN48GC6d+/O1q1bOXjwIK+//jqzZ8/O8I/PKVOm0Lt3b9avX8+GDRt46qmniIiIoG/fvoDt9tf+/fuZN28ePj4+vPTSS9x9993s2rXLvnhbUlISn376KdOmTcNsNvP444/zwgsv2H8xT58+nTfeeIOxY8dSt25dNm/eTN++fSlRogQ9e/a01/K///2PTz/9lIoVK/K///2PRx55hOjoaJo1a8aoUaN444032Lt3LwBeXl7X/bnNZjOjR48mKiqKgwcPMmDAAIYNG5YhDOREeno633zzDXB1bZe0tDTat29P06ZNWbFiBc7Ozrz33nt06NCBbdu28cILLxAZGUmvXr0yhLzsvg8vv/wyI0aMoG7duvaAcyvvn7OzM1u2bKFNmzY8+eSTfP755zg7O/PXX3/Z16kZPnw43333HePHj6dixYosX76cxx9/nFKlStGqVaubeu+yo1CFm5CQEPu/DP4RFxeHj48PHh4e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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"from matplotlib import pyplot as plt\n",
"\n",
"# Exponential reference\n",
"xx = np.linspace(0, fids['cycle_depth'].max())\n",
"plt.plot(xx, (1-5e-3)**(4*xx), label=r'Exponential Reference')\n",
"\n",
"def _p(fids):\n",
" plt.plot(fids['cycle_depth'], fids['fidelity'], 'o-', label=fids.name)\n",
"\n",
"fids.name = 'Sampled'\n",
"_p(fids)\n",
"\n",
"plt.ylabel('Circuit fidelity')\n",
"plt.xlabel('Cycle Depth $d$')\n",
"plt.legend(loc='best')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9715be97ec17"
},
"source": [
"## Optimize `PhasedFSimGate` parameters\n",
"\n",
"We know what circuits we requested, and in this simulated example, we know what coherent error has happened. But in a real experiment, there is likely unknown coherent error that you would like to characterize. Therefore, we make the five angles in `PhasedFSimGate` free parameters and use a classical optimizer to find which set of parameters best describes the data we collected from the noisy simulator (or device, if this was a real experiment)."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:39.430538Z",
"iopub.status.busy": "2024-10-18T09:50:39.429712Z",
"iopub.status.idle": "2024-10-18T09:50:39.573703Z",
"shell.execute_reply": "2024-10-18T09:50:39.572703Z"
},
"id": "ed89fa788b84"
},
"outputs": [],
"source": [
"import multiprocessing\n",
"pool = multiprocessing.get_context('spawn').Pool()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:50:39.577572Z",
"iopub.status.busy": "2024-10-18T09:50:39.576844Z",
"iopub.status.idle": "2024-10-18T09:51:05.689502Z",
"shell.execute_reply": "2024-10-18T09:51:05.688768Z"
},
"id": "33a7946b11f0"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0 chi = 0 gamma = 0 phi = 0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.531\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.685 zeta = 0 chi = 0 gamma = 0 phi = 0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.586\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.1 chi = 0 gamma = 0 phi = 0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.551\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0 chi = 0.1 gamma = 0 phi = 0 \n",
"Loss: 0.572\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0 chi = 0 gamma = 0.1 phi = 0 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.584\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0 chi = 0 gamma = 0 phi = 0.1 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.559\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.885 zeta = 0.04 chi = 0.04 gamma = 0.04 phi = 0.04 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.626\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.735 zeta = 0.01 chi = 0.01 gamma = 0.01 phi = 0.01 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.546"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.765 zeta = 0.044 chi = 0.044 gamma = -0.096 phi = 0.044 \n",
"Loss: 0.567\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.757 zeta = 0.0616 chi = -0.0784 gamma = -0.0344 phi = 0.0616 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.568\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.764 zeta = 0.0462 chi = -0.0338 gamma = -0.0258 phi = 0.0462 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.541\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.777 zeta = 0.0185 chi = -0.0535 gamma = 0.0897 phi = 0.0185 \n",
"Loss: 0.594\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.768 zeta = 0.0376 chi = 0.0196 gamma = -0.0496 phi = 0.0376 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.543\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.75 zeta = 0.0775 chi = -0.00167 gamma = -0.0262 phi = -0.0625 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.554\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.759 zeta = 0.0581 chi = -0.00125 gamma = -0.0196 phi = -0.0219 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.538\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.74 zeta = -0.0392 chi = -0.00217 gamma = -0.034 phi = 0.0288 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.553\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.774 zeta = 0.0652 chi = -0.000543 gamma = -0.0085 phi = 0.0072 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.535"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.805 zeta = 0.0729 chi = -0.0164 gamma = -0.0514 phi = 0.0177 \n",
"Loss: 0.553\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.753 zeta = 0.0257 chi = 0.0034 gamma = -0.00535 phi = 0.0119 \n",
"Loss: 0.535\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.766 zeta = 0.0405 chi = -0.0325 gamma = 0.0259 phi = -0.0202 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.537\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.77 zeta = 0.0296 chi = 0.0214 gamma = 0.0228 phi = -0.0554 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.53\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.773 zeta = 0.0213 chi = 0.0491 gamma = 0.047 phi = -0.106 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.54\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.78 zeta = 0.00626 chi = -0.00202 gamma = 0.0335 phi = -0.000752 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.537\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.775 zeta = 0.0192 chi = -0.00183 gamma = 0.0202 phi = -0.00603 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.53\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.777 zeta = 0.0154 chi = 0.0415 gamma = -0.0142 phi = 0.00331 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.538"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.769 zeta = 0.0342 chi = -0.014 gamma = 0.0159 phi = -0.0143 \n",
"Loss: 0.531\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.767 zeta = -0.0217 chi = 0.00415 gamma = 0.0299 phi = -0.0327 \n",
"Loss: 0.535\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.794 zeta = -0.00116 chi = 0.0005 gamma = 0.0409 phi = -0.0553 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.53\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.79 zeta = 0.0544 chi = -0.0017 gamma = 0.00998 phi = -0.0197 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.532\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0354 chi = -0.000241 gamma = 0.015 phi = -0.023 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.795 zeta = -0.000979 chi = 0.022 gamma = 0.0237 phi = -0.0415 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.529\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.782 zeta = 0.0328 chi = 0.0167 gamma = 0.049 phi = -0.0725 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.78 zeta = 0.0493 chi = 0.0251 gamma = 0.0735 phi = -0.109 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.535\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.795 zeta = 0.0191 chi = 0.026 gamma = 0.0403 phi = -0.093 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.535\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.78 zeta = 0.0192 chi = 0.00512 gamma = 0.0252 phi = -0.0278 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.771 zeta = 0.0476 chi = 0.0255 gamma = 0.0134 phi = -0.0327 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.532\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.788 zeta = 0.011 chi = 0.00675 gamma = 0.034 phi = -0.0497 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.802 zeta = 0.00938 chi = -0.00132 gamma = 0.036 phi = -0.0304 \n",
"Loss: 0.532\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.778 zeta = 0.0246 chi = 0.0158 gamma = 0.0261 phi = -0.0491 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.77 zeta = 0.0502 chi = -0.00431 gamma = 0.036 phi = -0.0473 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.531\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.789 zeta = 0.0118 chi = 0.0154 gamma = 0.0268 phi = -0.043 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.782 zeta = 0.00436 chi = 0.0241 gamma = 0.0495 phi = -0.0739 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = -0.00447 chi = 0.0101 gamma = 0.0156 phi = -0.0249 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.529\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.783 zeta = 0.0235 chi = 0.0151 gamma = 0.0407 phi = -0.0606 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0317 chi = -0.000901 gamma = 0.0116 phi = -0.0182 \n",
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.783 zeta = 0.0112 chi = 0.0179 gamma = 0.04 phi = -0.0599 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.791 zeta = 0.00614 chi = 0.00833 gamma = 0.0406 phi = -0.0472 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.781 zeta = 0.02 chi = 0.0139 gamma = 0.0297 phi = -0.0487 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.79 zeta = 0.0118 chi = 0.0225 gamma = 0.0432 phi = -0.077 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.529\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.782 zeta = 0.0173 chi = 0.00946 gamma = 0.0297 phi = -0.0401 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.779 zeta = 0.0225 chi = 0.0219 gamma = 0.0328 phi = -0.0512 \n",
"Loss: 0.528\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.786 zeta = 0.0139 chi = 0.0105 gamma = 0.0337 phi = -0.0501 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.777 zeta = 0.0225 chi = 0.0114 gamma = 0.0427 phi = -0.0608 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.528"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.786 zeta = 0.0145 chi = 0.0144 gamma = 0.0308 phi = -0.0474 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.00723 chi = 0.0114 gamma = 0.0249 phi = -0.0379 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.783 zeta = 0.0194 chi = 0.0142 gamma = 0.0367 phi = -0.0549 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.787 zeta = 0.0106 chi = 0.0127 gamma = 0.0387 phi = -0.0523 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.787 zeta = 0.0191 chi = 0.00661 gamma = 0.0278 phi = -0.038 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0132 chi = 0.0151 gamma = 0.037 phi = -0.0544 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.783 zeta = 0.0161 chi = 0.0157 gamma = 0.0355 phi = -0.0496 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.782 zeta = 0.0172 chi = 0.0183 gamma = 0.0363 phi = -0.0494 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.781 zeta = 0.0216 chi = 0.0149 gamma = 0.0292 phi = -0.0463 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0134 chi = 0.0132 gamma = 0.0363 phi = -0.0508 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.781 zeta = 0.0173 chi = 0.0127 gamma = 0.0393 phi = -0.0525 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0152 chi = 0.014 gamma = 0.0329 phi = -0.0487 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0106 chi = 0.0128 gamma = 0.0318 phi = -0.0425 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.786 zeta = 0.0101 chi = 0.0189 gamma = 0.0396 phi = -0.0584 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.783 zeta = 0.0155 chi = 0.0118 gamma = 0.0322 phi = -0.0446 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0152 chi = 0.012 gamma = 0.0305 phi = -0.0401 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0162 chi = 0.0104 gamma = 0.0273 phi = -0.0329 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0195 chi = 0.0139 gamma = 0.0351 phi = -0.051 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0129 chi = 0.0131 gamma = 0.0326 phi = -0.0446 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.014 chi = 0.0124 gamma = 0.0339 phi = -0.0432 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0143 chi = 0.0128 gamma = 0.0337 phi = -0.0446 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.782 zeta = 0.0162 chi = 0.0129 gamma = 0.0295 phi = -0.0386 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0144 chi = 0.0148 gamma = 0.0325 phi = -0.0424 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0138 chi = 0.0163 gamma = 0.0327 phi = -0.0412 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.786 zeta = 0.0127 chi = 0.015 gamma = 0.0365 phi = -0.0494 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.016 chi = 0.0156 gamma = 0.0349 phi = -0.0453 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0152 chi = 0.0171 gamma = 0.0343 phi = -0.0457 \n",
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.786 zeta = 0.0129 chi = 0.0146 gamma = 0.0321 phi = -0.0391 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.013 chi = 0.0195 gamma = 0.0376 phi = -0.0482 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.785 zeta = 0.0136 chi = 0.0176 gamma = 0.0359 phi = -0.0462 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0159 chi = 0.0175 gamma = 0.0314 phi = -0.0375 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Simulating with theta = -0.784 zeta = 0.0151 chi = 0.0168 gamma = 0.0327 phi = -0.0405 \n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Loss: 0.527\n"
]
}
],
"source": [
"from cirq.experiments.xeb_fitting import (\n",
" parameterize_circuit, \n",
" characterize_phased_fsim_parameters_with_xeb, \n",
" SqrtISwapXEBOptions,\n",
")\n",
"\n",
"# Set which angles we want to characterize (all)\n",
"options = SqrtISwapXEBOptions(\n",
" characterize_theta = True,\n",
" characterize_zeta = True,\n",
" characterize_chi = True,\n",
" characterize_gamma = True,\n",
" characterize_phi = True\n",
")\n",
"# Parameterize the sqrt(iswap)s in our circuit library\n",
"pcircuits = [parameterize_circuit(circuit, options) for circuit in circuits]\n",
"\n",
"# Run the characterization loop\n",
"characterization_result = characterize_phased_fsim_parameters_with_xeb(\n",
" sampled_df,\n",
" pcircuits,\n",
" cycle_depths,\n",
" options,\n",
" pool=pool,\n",
" # ease tolerance so it converges faster:\n",
" fatol=5e-3, \n",
" xatol=5e-3\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:51:05.692657Z",
"iopub.status.busy": "2024-10-18T09:51:05.692401Z",
"iopub.status.idle": "2024-10-18T09:51:05.697432Z",
"shell.execute_reply": "2024-10-18T09:51:05.696805Z"
},
"id": "fb24fa496cbe"
},
"outputs": [
{
"data": {
"text/plain": [
"{(cirq.GridQubit(4, 4), cirq.GridQubit(4, 5)): {'theta': -0.78412228525473,\n",
" 'zeta': 0.01376602370723885,\n",
" 'chi': 0.01626017388052132,\n",
" 'gamma': 0.032655490438939935,\n",
" 'phi': -0.0412064179844695}}"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"characterization_result.final_params"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:51:05.700345Z",
"iopub.status.busy": "2024-10-18T09:51:05.699767Z",
"iopub.status.idle": "2024-10-18T09:51:05.708082Z",
"shell.execute_reply": "2024-10-18T09:51:05.707400Z"
},
"id": "9845785f9a6a"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" cycle_depth \n",
" fidelity \n",
" pair \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 3 \n",
" 0.934976 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 1 \n",
" 23 \n",
" 0.610642 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 2 \n",
" 43 \n",
" 0.399735 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 3 \n",
" 63 \n",
" 0.254834 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
" 4 \n",
" 83 \n",
" 0.166172 \n",
" (q(4, 4), q(4, 5)) \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" cycle_depth fidelity pair\n",
"0 3 0.934976 (q(4, 4), q(4, 5))\n",
"1 23 0.610642 (q(4, 4), q(4, 5))\n",
"2 43 0.399735 (q(4, 4), q(4, 5))\n",
"3 63 0.254834 (q(4, 4), q(4, 5))\n",
"4 83 0.166172 (q(4, 4), q(4, 5))"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"characterization_result.fidelities_df"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:51:05.710800Z",
"iopub.status.busy": "2024-10-18T09:51:05.710235Z",
"iopub.status.idle": "2024-10-18T09:51:05.938401Z",
"shell.execute_reply": "2024-10-18T09:51:05.937693Z"
},
"id": "55d1bc779f0f"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" a_0 \n",
" layer_fid_0 \n",
" cycle_depths_0 \n",
" fidelities_0 \n",
" a_std_0 \n",
" layer_fid_std_0 \n",
" a_c \n",
" layer_fid_c \n",
" cycle_depths_c \n",
" fidelities_c \n",
" a_std_c \n",
" layer_fid_std_c \n",
" characterized_angles \n",
" theta \n",
" zeta \n",
" chi \n",
" gamma \n",
" phi \n",
" \n",
" \n",
" pair \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" (q(4, 4), q(4, 5)) \n",
" 0.984487 \n",
" 0.978941 \n",
" [3, 23, 43, 63, 83] \n",
" [0.9243081067265101, 0.60103787571659, 0.39494... \n",
" 0.003663 \n",
" 0.000143 \n",
" 0.998506 \n",
" 0.978745 \n",
" [3, 23, 43, 63, 83] \n",
" [0.9349760631860324, 0.6106415432638149, 0.399... \n",
" 0.003217 \n",
" 0.000125 \n",
" {'theta': -0.78412228525473, 'zeta': 0.0137660... \n",
" -0.784122 \n",
" 0.013766 \n",
" 0.01626 \n",
" 0.032655 \n",
" -0.041206 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" a_0 layer_fid_0 cycle_depths_0 \\\n",
"pair \n",
"(q(4, 4), q(4, 5)) 0.984487 0.978941 [3, 23, 43, 63, 83] \n",
"\n",
" fidelities_0 \\\n",
"pair \n",
"(q(4, 4), q(4, 5)) [0.9243081067265101, 0.60103787571659, 0.39494... \n",
"\n",
" a_std_0 layer_fid_std_0 a_c layer_fid_c \\\n",
"pair \n",
"(q(4, 4), q(4, 5)) 0.003663 0.000143 0.998506 0.978745 \n",
"\n",
" cycle_depths_c \\\n",
"pair \n",
"(q(4, 4), q(4, 5)) [3, 23, 43, 63, 83] \n",
"\n",
" fidelities_c \\\n",
"pair \n",
"(q(4, 4), q(4, 5)) [0.9349760631860324, 0.6106415432638149, 0.399... \n",
"\n",
" a_std_c layer_fid_std_c \\\n",
"pair \n",
"(q(4, 4), q(4, 5)) 0.003217 0.000125 \n",
"\n",
" characterized_angles \\\n",
"pair \n",
"(q(4, 4), q(4, 5)) {'theta': -0.78412228525473, 'zeta': 0.0137660... \n",
"\n",
" theta zeta chi gamma phi \n",
"pair \n",
"(q(4, 4), q(4, 5)) -0.784122 0.013766 0.01626 0.032655 -0.041206 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from cirq.experiments.xeb_fitting import before_and_after_characterization\n",
"before_after_df = before_and_after_characterization(fids, characterization_result)\n",
"before_after_df"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"execution": {
"iopub.execute_input": "2024-10-18T09:51:05.941675Z",
"iopub.status.busy": "2024-10-18T09:51:05.940904Z",
"iopub.status.idle": "2024-10-18T09:51:06.039287Z",
"shell.execute_reply": "2024-10-18T09:51:06.038541Z"
},
"id": "39d3e22dc65a"
},
"outputs": [
{
"data": {
"image/png": "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9RVly5ZN9XxISAju7u6p9t+hQ4c4efKk9p9JHnzwQfbv38++fftSHrVr16Zz584pH2uf5RwNGjS47nL5w4cPU6ZMGQDKli1LQEBAqv2VkJDA999/r/1lksTERKzW1L+ybTYbDocDyAX7zOwZtGZZsmSJ4enpacybN8/49ddfjWeeecYoWLCgERMTY3a0PK9fv36Gn5+fsXXrViM6OjrlkZiYmDKmb9++RunSpY2vvvrK2LNnjxEaGmqEhoaamFr+699X0xiG9llOsmvXLsPNzc0YPXq08dtvvxkLFy408uXLZyxYsCBlzLhx44yCBQsaq1atMn766SejdevWLnOZaG7UvXt3o2TJkimX9i5fvtwoWrSo8corr6SMceV9lmfLiGEYxpQpU4zSpUsbHh4eRt26dY3vvvvO7EhiGAaQ5uOjjz5KGXP58mXjueeeMwoVKmTky5fPeOKJJ4zo6GjzQst1/ltGtM9yli+++MKoWrWq4enpaVSqVMmYNWtWqucdDocxbNgww9/f3/D09DQefPBB49ChQyallYSEBGPAgAFG6dKlDS8vL+Ouu+4yXnvtNSMpKSlljCvvM4th/Gv5NhEREZFslifnjIiIiEjOoTIiIiIiplIZEREREVOpjIiIiIipVEZERETEVCojIiIiYiqVERERETGVyoiIiIiYSmVERERETKUyIiIiIqZSGRERERFTqYyIiIiIqf4P08Fz2ITh54AAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from cirq.experiments.xeb_fitting import exponential_decay\n",
"\n",
"for i, row in before_after_df.iterrows():\n",
" plt.axhline(1, color='grey', ls='--')\n",
" plt.plot(row['cycle_depths_0'], row['fidelities_0'], '*', color='red')\n",
" plt.plot(row['cycle_depths_c'], row['fidelities_c'], 'o', color='blue')\n",
"\n",
" xx = np.linspace(0, np.max(row['cycle_depths_0']))\n",
" plt.plot(xx, exponential_decay(xx, a=row['a_0'], layer_fid=row['layer_fid_0']), color='red')\n",
" plt.plot(xx, exponential_decay(xx, a=row['a_c'], layer_fid=row['layer_fid_c']), color='blue')\n",
" \n",
" plt.show()"
]
}
],
"metadata": {
"colab": {
"name": "isolated_xeb.ipynb",
"toc_visible": true
},
"kernelspec": {
"display_name": "Python 3",
"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.10.15"
}
},
"nbformat": 4,
"nbformat_minor": 0
}