diff --git a/surface.ipynb b/surface.ipynb new file mode 100644 index 0000000..513b828 --- /dev/null +++ b/surface.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "24bc55f6-0c93-479c-9408-80e0b37eaa57", + "metadata": {}, + "outputs": [], + "source": [ + "# threshold simulation for surface codes" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "df077a0b-26a8-4138-a752-b50f5ed96215", + "metadata": {}, + "outputs": [], + "source": [ + "!pip freeze" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7c5d6094-a2cd-4bd1-848b-c7495526fbc6", + "metadata": {}, + "outputs": [ + { + "ename": "ImportError", + "evalue": "cannot import name 'Matching' from 'pymatching' (unknown location)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn [3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpymatching\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Matching\n", + "\u001b[0;31mImportError\u001b[0m: cannot import name 'Matching' from 'pymatching' (unknown location)" + ] + } + ], + "source": [ + "from pymatching import Matching" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "0ab24e32-9bcd-40a5-9da6-98d5a5437afc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pymatching in /opt/conda/lib/python3.10/site-packages (2.0.1)\n", + "Requirement already satisfied: stim in /opt/conda/lib/python3.10/site-packages (1.10.0)\n", + "Requirement already satisfied: matplotlib in /opt/conda/lib/python3.10/site-packages (from pymatching) (3.6.2)\n", + "Requirement already satisfied: networkx in /opt/conda/lib/python3.10/site-packages (from pymatching) (2.8.8)\n", + "Requirement already satisfied: scipy in /opt/conda/lib/python3.10/site-packages (from pymatching) (1.9.3)\n", + "Requirement already satisfied: numpy in /opt/conda/lib/python3.10/site-packages (from pymatching) (1.23.4)\n", + "Requirement already satisfied: retworkx>=0.11.0 in /opt/conda/lib/python3.10/site-packages (from pymatching) (0.12.1)\n", + "Requirement already satisfied: rustworkx==0.12.1 in /opt/conda/lib/python3.10/site-packages (from retworkx>=0.11.0->pymatching) (0.12.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (9.2.0)\n", + "Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (0.11.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (1.0.6)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (1.4.4)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (3.0.9)\n", + "Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (21.3)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (4.38.0)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.10/site-packages (from matplotlib->pymatching) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib->pymatching) (1.16.0)\n" + ] + } + ], + "source": [ + "#Only need to install onece for a container\n", + "#!pip install pymatching stim --upgrade" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e4b23f35-980e-4957-bf35-9c3237bb43ec", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\"\"\"\n", + "This code is supported by the website: https://www.guanjihuan.com\n", + "The newest version of this code is on the web page: https://www.guanjihuan.com/archives/10909\n", + "\"\"\"\n", + "\n", + "import numpy as np\n", + "\n", + "\n", + "def main():\n", + " x_array = np.arange(-2, 5.1)\n", + " y_array = np.arange(-2, 5.1)\n", + " coordinates = []\n", + " for x in x_array:\n", + " for y in y_array:\n", + " coordinates.append([x, y])\n", + " plot_dots(coordinates)\n", + "\n", + "\n", + "def plot_dots(coordinates):\n", + " import matplotlib.pyplot as plt\n", + " fig, ax = plt.subplots(figsize=(3,3))\n", + " plt.subplots_adjust(left=0.05, bottom=0.05, right=0.95, top=0.95)\n", + " plt.axis('off')\n", + " for i1 in range(len(coordinates)):\n", + " for i2 in range(len(coordinates)):\n", + " if np.sqrt((coordinates[i1][0] - coordinates[i2][0])**2+(coordinates[i1][1] - coordinates[i2][1])**2) < 1.1:\n", + " ax.plot([coordinates[i1][0], coordinates[i2][0]], [coordinates[i1][1], coordinates[i2][1]], '-k', linewidth=1)\n", + " for i in range(len(coordinates)):\n", + " pass\n", + " ax.plot(coordinates[i][0], coordinates[i][1], 'ro', markersize=10)\n", + " # plt.savefig('square.eps') \n", + " plt.show()\n", + "\n", + "\n", + "main()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54c2ad79-8ddf-4894-9dfa-f0ee0e76fd21", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}