Last active
April 6, 2023 16:30
-
-
Save kpedro88/250b1aaae103fa8acbd5f03586900c9d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "6cd4e193", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# imports\n", | |
"import matplotlib as mpl\n", | |
"import matplotlib.pyplot as plt\n", | |
"import matplotlib.colors as colors\n", | |
"from matplotlib.ticker import AutoMinorLocator, ScalarFormatter\n", | |
"import matplotlib.patheffects as path_effects\n", | |
"from matplotlib.patches import Rectangle\n", | |
"from matplotlib.offsetbox import AnchoredText\n", | |
"from matplotlib import _api\n", | |
"from matplotlib.transforms import Bbox" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "28762b87", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# data\n", | |
"fig_width = 9.0\n", | |
"yvals = [35.65003752534982, 80.2125844320371, 81.2820855577976, 186.27144606995282, 561.4880910242597, 1604.251688640742, 1746.8518387421414, 7130.007505069964, 11586.262195738693, 12121.01275861894, 12477.513133872439]\n", | |
"width = [8, 10, 6, 5, 3, 3, 10, 3, 3, 4, 9]\n", | |
"height = [9.23070064672871, 20.7690764551396, 21.045997474541462, 48.23041087915752, 145.3835351859772, 415.381529102792, 452.3043316897068, 1846.1401293457423, 2999.9777101868312, 3138.438219887762, 3230.745226355049]\n", | |
"left = [1978, 1988, 1989, 1995, 1981, 1992, 2001, 2010, 2015, 2022, 2029]\n", | |
"colors = ['#f89c20', '#f89c20', '#f89c20', '#f89c20', '#964a8b', '#964a8b', '#964a8b', '#964a8b', '#964a8b', '#964a8b', '#964a8b']\n", | |
"align = 'edge'\n", | |
"labels = ['PETRA', 'SLC', 'LEP', 'LEP2', 'SppS', 'Tevatron (I)', 'Tevatron (II)', 'LHC (1)', 'LHC (2)', 'LHC (3)', 'HL-LHC']" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "df949c1f", | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"'''\n", | |
"Text placement options (using 'loc' convention):\n", | |
" | | \n", | |
" upper left | upper center | upper right \n", | |
"______________|______________|______________\n", | |
" |(0,1) (1,1)| \n", | |
" | | \n", | |
" center left | center | center right (right)\n", | |
" | (BOX) | \n", | |
" |(0,0) (1,0)| \n", | |
"¯¯¯¯¯¯¯¯¯¯¯¯¯¯|¯¯¯¯¯¯¯¯¯¯¯¯¯¯|¯¯¯¯¯¯¯¯¯¯¯¯¯¯\n", | |
" lower left | lower center | lower right \n", | |
" | | \n", | |
"\n", | |
"BboxBase.corners() returns [[x0, y0], [x0, y1], [x1, y0], [x1, y1]]\n", | |
"augment w/: [[x0, yc], [xc, y0], [x1, yc], [xc, y1], [xc, yc]]\n", | |
"\n", | |
"translation to alignment & data coords:\n", | |
"desired | va, ha @ point\n", | |
"upper left | bottom, right @ (0,1) -> [1]\n", | |
"upper center | bottom, center @ (½,1) -> [7]\n", | |
"upper right | bottom, left @ (1,1) -> [3]\n", | |
"center left | center, right @ (0,½) -> [4]\n", | |
"center | center, center @ (½,½) -> [8]\n", | |
"center right | center, left @ (1,½) -> [6]\n", | |
"lower left | top, right @ (0,0) -> [0]\n", | |
"lower center | top, center @ (½,0) -> [5]\n", | |
"lower right | top, left @ (1,0) -> [2]\n", | |
"\n", | |
"s, kwargs will be passed to annotate() call\n", | |
"'''\n", | |
"def annotateAroundBox(s, loc, ax, bbox, **kwargs):\n", | |
" # only want to deal with str version\n", | |
" reverse_codes = {val:key for key,val in AnchoredText.codes.items()}\n", | |
" list_codes = list(AnchoredText.codes.keys())\n", | |
" # loc conversions\n", | |
" loc_to_actual = {\n", | |
" 'upper left': {'va': 'bottom', 'ha': 'right', 'index': 1},\n", | |
" 'upper center': {'va': 'bottom', 'ha': 'center', 'index': 7},\n", | |
" 'upper right': {'va': 'bottom', 'ha': 'left', 'index': 3},\n", | |
" 'center left': {'va': 'center', 'ha': 'right', 'index': 4},\n", | |
" 'center': {'va': 'center', 'ha': 'center', 'index': 8},\n", | |
" 'center right': {'va': 'center', 'ha': 'left', 'index': 6},\n", | |
" 'lower left': {'va': 'top', 'ha': 'right', 'index': 0},\n", | |
" 'lower center': {'va': 'top', 'ha': 'center', 'index': 5},\n", | |
" 'lower right': {'va': 'top', 'ha': 'left', 'index': 2},\n", | |
" }\n", | |
" loc_to_actual['right'] = loc_to_actual['center right']\n", | |
" # validate and convert loc\n", | |
" if not isinstance(loc, str):\n", | |
" loc = _api.check_getitem(reverse_codes, loc=loc)\n", | |
" else:\n", | |
" _api.check_in_list(list_codes, loc=loc)\n", | |
"\n", | |
" # get corners and add center points\n", | |
" points = bbox.corners().tolist()\n", | |
" x0 = points[0][0]\n", | |
" x1 = points[3][0]\n", | |
" y0 = points[0][1]\n", | |
" y1 = points[3][1]\n", | |
" xc = (x0+x1)/2.\n", | |
" yc = (y0+y1)/2.\n", | |
" points.extend([[x0,yc],[xc,y0],[x1,yc],[xc,y1],[xc,yc]])\n", | |
"\n", | |
" # create annotation in desired location\n", | |
" actual = loc_to_actual[loc]\n", | |
" actual['xy'] = points[actual.pop('index')]\n", | |
" actual['xycoords'] = 'data'\n", | |
" kwargs.update(actual)\n", | |
" an = ax.annotate(s, **kwargs)\n", | |
" return an\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "7ba9b728", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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TZo0kdvt1rfffuuT8wEV4XJ7NG/jXs3buFcut8ff5QDwBRPFZGVlmZLMrKwsf5cCAOVmt9vNP/7Tft5555mSzPPPP990u93e7bt27TKjo6NNSeaKFStM0zRNt9tt2u120zCMEv8OfvbZZ6Yks1GjRsW2L1iwoEQdq1atMm02mxkWFlZs+0svvWRKMnv37l1q/c2bNzclmXa73fzpp5+K7SssLDQdDocpyXz66aeL7evataspyWzRokWp34+EhATzyJEj3u3PPfecKck844wzSq3jj/72t7+ZksyePXuWuj8uLs6UZK5Zs8a77ccffzztewwePNiUZI4YMaJMNQBV4Vh+odl07Fdm07FfmcfyC/1dDoATKpNJeIIHABbmcrm0ZMkSORwOzZ8/Xzbb//7Zb9iwobe7YdGTLJvNpm7dusk0TT399NPFzvXMM89IUrHumZJ0wQUXlHjfDh06qG3btiosLNTixYvLXfeVV15ZYiKTadOmyeVyqW7duiW6ln755ZcyDEObN2/W0aNHS5zvww8/VExMjPfPY8aMkd1u18GDB8tUT1H3z4SEhPJeyik1btxYkrR9+3afnRMAAAIegKBVnjXJvv76axmGoeuvv74aKgsc33zzjUzTlN1u10UXXaQ+ffoU+/riiy8kqVjXxqJule+++653m8vl0ooVK2QYhh577LFi7zF//ny1bt1aYWFhxcbVFS0ZsH79+nLXPWjQoBLbfvjhB0lSly5dSuxLSEhQnTp1JKlEl0fDMEoNodHR0TJNs0z17N+/X5JKLHlQGQ0aNJAkHThwwGfnBACAWTQBHynvOmNl/cGyKk2ZMkUPPvigevfuHZSzLp5uTbKsrCytWbNG7dodn/570KBBOuuss/TRRx9p8uTJatiwoT9KrnY7d+6UJOXn53uXUChNbm6u9/Vll12m6Oho7dmzR9u2bdNZZ52lf/7zn3K73Wrbtq2io6O9befOnauLL75YpmmqTp06SkxMVM2aNWWz2bR69WplZWUpJyen3HW3bNmyxLasrCxJUqNGjUo9platWjpw4ID27dtXbPvJTy3Lsr00RddckWs5lSNHjkiSoqKifHZOAAAIeICPsCZZ9arImmTPP/+8hgwZouHDh3snC7G6evXqSToein7//fcyHzdgwAB9/vnneuyxx/Tee+9p2rRpkqS//OUvxdo98MADMk1T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2xUdHV1s/9q1a/Xrr79WWz0AAAAAiqtwF83bb79df/nLX7Rs2TIZhqHdu3frvffe08MPP6y7777blzWGrKKw9MQTT5QId5J0wQUX6JJLLvH+2eFwyOFwaPv27WrTpo3sdrsMw1B0dLTuu+++Esf36dNHhmFoypQpuvXWWxUZGentctmpUyft3r27WPuiyXNGjRpVItxJUrt27XTjjTdW6poBAAAAVFyFn+A9+uij8ng86tu3r3JycnTBBRcoIiJCDz/8cKlhAuUXExOj/fv3a+nSpRo6dGiZjjFNU8nJyXK5XOrUqZNyc3OVmpqqV155RXv27NEnn3xS4phnnnlGe/fuVYsWLVSnTh39+uuvWrVqlVq1aqW9e/d6w1zt2rUlSWvWrPHdRQIAAADwmXI/wXvyySeVk5MjwzA0fvx4HTx4UOvWrdPSpUu1f/9+PfXUU1VRZ0gqGss2ZcoUdenSRZMmTdLmzZtPe4zH41FYWJgOHDig5cuXa926dd6nrJ9++ql++eWXEsfs3btXH3/8sTZt2qSlS5fqyJEjatq0qY4ePVosWN51112SpK+//lrJycmaMGGCVq9e7bsLBgAA1cpmGGrXOE7tGsfJZhj+LgeADximaZrlOcBut2vPnj2qV69eVdXkF06nU06nU263W5s2barQqvFV4corryyxuLzD4VCbNm304osv6uKLLy623e1269VXXy3RTbZfv36aO3euLrvsMv3f//2fpONdNBcsWKBWrVpp48aNxdovXrxYvXr1UkREhPLy8rzbU1JS9Nprr+nkvzZ2u11nnXWWHn/8cd10000+u3YAAAAgFGVnZysuLq5CmaTcT/DKmQeDRkpKilJTU7V8+XJ/l1LM7NmztWvXLj344IPq2LGjYmNj5XK59Ouvv6p///4aP358iWNuv/32Etsuv/xySdK6detK7CttNtSePXvK4XAoPz+/2EQuTqdTBw8e1GOPPaZu3bqpdu3acrvd2rJli26++WbdcMMNlblcAAAAAJVQoUlWDB7hV6uGDRtq8uTJWrlypbKysrR9+3a1bdtWkjRp0qRiAcxms8nhKDm0skWLFpKknJycEvuaNm1a6vtGRERIkvbs2VNse61atfTUU09p2bJlOnjwoA4dOqS+fftKkt5//32tXbu2AlcJAAAAoLIqFPBatmypOnXqnPYLVScxMVFr1qyR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P/9Z4r34/AceX9z/AwcOaODAgWrYsKEiIiLUpEkT3XvvvcrOzi52Hu5/YPHVv/1FDhw4oMaNG8swDB0+fLjYPl/cewJeBR07dkzt27eX0+kssc80TV111VXaunWrZs+erVWrVqlp06bq16+fjh075m13yy23KC0tTV9++aV+/fVXDR48WNddd51WrVrlbXPjjTdq/fr1+u677/TVV19p4cKFuuOOO6rlGnFqlb3/x44dU//+/WUYhubNm6fFixeroKBAl19+uTwej/dc3P/As2DBAqWkpGjp0qX67rvvVFhYqP79+xf7bD/44IP6v//7P3388cdasGCBdu/ercGDB3v3u91uXXrppSooKNBPP/2kWbNmaebMmZo4caK3zbZt23TppZfqwgsv1OrVq/XAAw9o1KhR+vbbb6v1elGcL+5/kdtuu01Dhw4t9X2ys7PVv39/NW3aVCtWrNDzzz+vv/3tb3rjjTeq7Nrw53xx/1esWKF69erp3Xff1fr16zV+/HiNGzdOr7zyircNn//A5Iv7b7PZdOWVV+rLL7/Upk2bNHPmTH3//fe66667vG24/4HHl//2S9LIkSPVrl27Ett9du9NVJok8/PPP/f+OS0tzZRkrlu3zrvN7XabdevWNd98803vtho1aphvv/12sXPVqVPH2yY1NdWUZC5fvty7/+uvvzYNwzB37dpVRVeD8qrI/f/2229Nm81mZmVledscPnzYNAzD/O6770zT5P4Hi3379pmSzAULFpimefw+hoWFmR9//LG3zYYNG0xJ5pIlS0zTNM3//Oc/ps1mMzMyMrxtXnvtNTM2NtbMz883TdM0H3nkEfPss88u9l5Dhw41BwwYUNWXhHKoyP0/2eOPP262b9++xPZXX33VrF27tvfvg2ma5tixY81WrVr5/iJQYZW9/0Xuuece88ILL/T+mc9/cPDV/f/nP/9pNm7c2Ptn7n/gq8y9f/XVV83evXubc+fONSWZhw4d8u7z1b3nCV4VyM/PlyRFRkZ6t9lsNkVERGjRokXebeedd54+/PBDHTx4UB6PRx988IHy8vLUp08fSdKSJUtUq1YtdenSxXtMv379ZLPZtGzZsuq5GJRbWe5/fn6+DMMoth5KZGSkbDabtw33PzhkZWVJkurUqSPp+G/nCwsL1a9fP2+b1q1bKzExUUuWLJF0/N6ec845ql+/vrfNgAEDlJ2drfXr13vbnHyOojZF50BgqMj9L4slS5boggsuUHh4uHfbgAEDlJaWpkOHDvmoelSWr+5/VlaW9xwSn/9g4Yv7v3v3bn322Wfq3bu3dxv3P/BV9N6npqbqySef1Ntvvy2brWQM89W9J+BVgaIbOm7cOB06dEgFBQV69tln9fvvv2vPnj3edh999JEKCwt1xhlnKCIiQnfeeac+//xzJSUlSTo+Rq9evXrFzu1wOFSnTh1lZGRU6zWh7Mpy/88991zVqFFDY8eOVU5Ojo4dO6aHH35Ybrfb24b7H/g8Ho8eeOAB9ezZU23btpV0/L6Fh4erVq1axdrWr1/fe98yMjKKhbui/UX7TtcmOztbubm5VXE5KKeK3v+yKMvfEfiXr+7/Tz/9pA8//LBY93s+/4Gvsvd/2LBhio6OVqNGjRQbG6vp06d793H/A1tF731+fr6GDRum559/XomJiaWe21f3noBXBcLCwvTZZ59p06ZNqlOnjqKjo/XDDz9o0KBBxdL6hAkTdPjwYX3//ff65ZdfNHr0aF133XX69ddf/Vg9Kqss979u3br6+OOP9X//93+KiYlRXFycDh8+rE6dOpX6Gx0EppSUFK1bt04ffPCBv0uBH3D/Q5sv7v+6det05ZVX6vHHH1f//v19WB2qWmXv/0svvaSVK1dq9uzZSk9P1+jRo31cIapKRe/9uHHj1KZNG910001VVNn/OKr8HUJU586dtXr1amVlZamgoEB169ZV9+7dvd3t0tPT9corr2jdunU6++yzJUnt27fXjz/+KKfTqWnTpikhIUH79u0rdl6Xy6WDBw8qISGh2q8JZfdn91+S+vfvr/T0dGVmZsrhcKhWrVpKSEhQs2bNJIn7H+Duvfde78Q3jRs39m5PSEhQQUGBDh8+XOw3eXv37vXet4SEBP3888/Fzlc009bJbf44+9bevXsVGxurqKioqrgklENl7n9ZnOr+F+2Df/ni/qempqpv376644479NhjjxXbx+c/sPni/ickJCghIUGtW7dWnTp1dP7552vChAlq0KAB9z+AVebez5s3T7/++qs++eQTSccn5ZOk+Ph4jR8/Xk888YTP7j2PCqpYXFyc6tatq82bN+uXX37RlVdeKUnKycmRpBJPa+x2u3cWxR49eujw4cNasWKFd/+8efPk8XjUvXv3aroCVMap7v/J4uPjVatWLc2bN0/79u3TFVdcIYn7H6hM09S9996rzz//XPPmzdNZZ51VbH/nzp0VFhamuXPnerelpaVpx44d6tGjh6Tj9/bXX38tFuC/++47xcbGKjk52dvm5HMUtSk6B/zDF/e/LHr06KGFCxeqsLDQu+27775Tq1atVLt27cpfCCrEV/d//fr1uvDCCzV8+HD9/e9/L/E+fP4DU1V9/ot+7isaw8/9Dzy+uPeffvqp1qxZo9WrV2v16tXebrk//vijUlJSJPnw3pdrShZ4HTlyxFy1apW5atUqU5I5efJkc9WqVeb27dtN0zTNjz76yPzhhx/M9PR084svvjCbNm1qDh482Ht8QUGBmZSUZJ5//vnmsmXLzC1btpgvvPCCaRiGOWfOHG+7gQMHmh07djSXLVtmLlq0yGzRooU5bNiwar9eFFfZ+2+apjljxgxzyZIl5pYtW8x33nnHrFOnjjl69Ohibbj/gefuu+824+LizPnz55t79uzxfuXk5Hjb3HXXXWZiYqI5b94885dffjF79Ohh9ujRw7vf5XKZbdu2Nfv372+uXr3a/Oabb8y6deua48aN87bZunWrGR0dbY4ZM8bcsGGD6XQ6Tbvdbn7zzTfVer0ozhf33zRNc/PmzeaqVavMO++802zZsqX335OiWTMPHz5s1q9f37z55pvNdevWmR988IEZHR1tvv7669V6vSjOF/f/119/NevWrWvedNNNxc6xb98+bxs+/4HJF/d/zpw55owZM8xff/3V3LZtm/nVV1+Zbdq0MXv27Oltw/0PPL76t/9kP/zwQ4lZNH117wl4FVR0U/74NXz4cNM0/zflbVhYmJmYmGg+9thjxaa7Nk3T3LRpkzl48GCzXr16ZnR0tNmuXbsSyyYcOHDAHDZsmBkTE2PGxsaaI0aMMI8cOVJdl4lT8MX9Hzt2rFm/fn0zLCzMbNGihfniiy+aHo+nWBvuf+Ap7b5LMt966y1vm9zcXPOee+4xa9eubUZHR5tXX321uWfPnmLn+e2338xBgwaZUVFRZnx8vPnQQw+ZhYWFxdr88MMPZocOHczw8HCzWbNmxd4D/uGr+9+7d+9Sz7Nt2zZvmzVr1pi9evUyIyIizEaNGpnPPPNMNV0lTsUX9//xxx8v9RxNmzYt9l58/gOPL+7/vHnzzB49ephxcXFmZGSk2aJFC3Ps2LHFfsg3Te5/oPHVv/0nKy3gFW2v7L03ThQNAAAAAAhyjMEDAAAAAIsg4AEAAACARRDwAAAAAMAiCHgAAAAAYBEEPAAAAACwCAIeAAAAAFgEAQ8AAAAALIKABwAAAAAWQcADAAAAAIsg4AEAAACARRDwAAAIEG63Wx6Px99lAACCGAEPAIBSvP322zrjjDOUn59fbPtVV12lm2++WZI0e/ZsderUSZGRkWrWrJmeeOIJuVwub9vJkyfrnHPOUY0aNdSkSRPdc889Onr0qHf/zJkzVatWLX355ZdKTk5WRESEduzYUT0XCACwJAIeAACluPbaa+V2u/Xll196t+3bt09z5szRbbfdph9//FG33HKL/vKXvyg1NVWvv/66Zs6cqb///e/e9jabTVOnTtX69es1a9YszZs3T4888kix98nJydGzzz6r6dOna/369apXr161XSMAwHoM0zRNfxcBAEAguueee/Tbb7/pP//5j6TjT+ScTqe2bNmiiy++WH379tW4ceO87d9991098sgj2r17d6nn++STT3TXXXcpMzNT0vEneCNGjNDq1avVvn37qr8gAIDlEfAAADiFVatWqWvXrtq+fbsaNWqkdu3a6dprr9WECRNUt25dHT16VHa73dve7XYrLy9Px44dU3R0tL7//ntNmjRJGzduVHZ2tlwuV7H9M2fO1J133qm8vDwZhuHHKwUAWIXD3wUAABCoOnbsqPbt2+vtt99W//79tX79es2ZM0eSdPToUT3xxBMaPHhwieMiIyP122+/6bLLLtPdd9+tv//976pTp44WLVqkkSNHqqCgQNHR0ZKkqKgowh0AwGcIeAAAnMaoUaM0ZcoU7dq1S/369VOTJk0kSZ06dVJaWpqSkpJKPW7FihXyeDx68cUXZbMdH/L+0UcfVVvdAIDQRMADAOA0brjhBj388MN688039fbbb3u3T5w4UZdddpkSExM1ZMgQ2Ww2rVmzRuvWrdPTTz+tpKQkFRYW6uWXX9bll1+uxYsXa9q0aX68EgBAKGAWTQAATiMuLk7XXHONYmJidNVVV3m3DxgwQF999ZX++9//qmvXrjr33HP10ksvqWnTppKk9u3ba/LkyXr22WfVtm1bvffee5o0aZKfrgIAECqYZAUAgD/Rt29fnX322Zo6daq/SwEA4LQIeAAAnMKhQ4c0f/58DRkyRKmpqWrVqpW/SwIA4LQYgwcAwCl07NhRhw4d0rPPPku4AwAEBZ7gAQAAAIBFMMkKAAAAAFgEAQ8AAAAALIKABwAAAAAWQcADAAAAAIsg4AEAAACARRDwAAAAAMAiCHgAAAAAYBEEPAAAAACwCAIeAAAAAFjE/wMFPo7dWR0+uwAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<Figure size 900x700 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# code\n", | |
"fig, ax = plt.subplots(figsize=(fig_width, 7))\n", | |
"bars = ax.barh(yvals, width, height=height, left=left, color=colors, align=align, edgecolor='black', linewidth=1, label=labels)\n", | |
"ax.axvline(x=2023,linestyle='--')\n", | |
"ax.set_xlabel(\"year\")\n", | |
"ax.set_ylabel(\"{} [{}]\".format(r\"$\\sqrt{s}$\",\"TeV\"))\n", | |
"ax.set_yscale('log')\n", | |
"bar_labels = [annotateAroundBox(p.get_label(), 'upper center', ax, p.get_bbox(), size=14) for p in bars.patches]\n", | |
"plt.tight_layout()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "15ea8a66", | |
"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.8.10" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment