{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Explore the data-files in the repository and familiarize with pandas" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make a map that assigns the total number of memory operations per element to a given algorithm" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "memops = {'scal':2, 'axpby':3, 'pointwiseDot':6, 'dot':2, 'dx':3, 'dy':3,\n", " 'arakawa':34, 'cg':42}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's read in one of the csv files (actually they are \"whitespace seperated values\") and compute the bandwidth from the time measurements, vector size and the memory operations" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nNxNysizescalaxpbypointwiseDotdotdxdyarakawacg
021441440.663552314.478876416.429966524.46066256.16254197.58548239.256309138.435948126.542938
122882882.6542081203.5204981272.2915591633.536364115.879737183.928301117.065735308.217740227.802475
223843844.7185921953.7227042088.4146921985.410174137.448463198.315441143.189693367.836204248.862136
3257657610.6168322892.5111462698.8057651293.980788140.424998207.967927189.350724359.265776312.356009
4276876818.8743683349.488554541.433391595.559361157.65952886.322418106.536537290.893499244.174862
.......................................
315557657666.3552001351.859247361.280581246.226615189.578161126.820840112.297043147.858988161.701097
3165768768117.964800457.724662231.659346223.125189185.692383116.749053103.895909139.584366150.029270
317511521152265.420800227.990465218.867049207.946746187.211376123.177679107.402446141.847240118.064374
318515361536471.859200202.428668207.751258205.269221104.12364496.82142278.527590124.321659133.102875
319519201920737.280000144.215478179.177603203.338037188.251876123.05775090.144151133.416645139.521228
\n", "

320 rows × 12 columns

\n", "
" ], "text/plain": [ " n Nx Ny size scal axpby pointwiseDot \\\n", "0 2 144 144 0.663552 314.478876 416.429966 524.460662 \n", "1 2 288 288 2.654208 1203.520498 1272.291559 1633.536364 \n", "2 2 384 384 4.718592 1953.722704 2088.414692 1985.410174 \n", "3 2 576 576 10.616832 2892.511146 2698.805765 1293.980788 \n", "4 2 768 768 18.874368 3349.488554 541.433391 595.559361 \n", ".. .. ... ... ... ... ... ... \n", "315 5 576 576 66.355200 1351.859247 361.280581 246.226615 \n", "316 5 768 768 117.964800 457.724662 231.659346 223.125189 \n", "317 5 1152 1152 265.420800 227.990465 218.867049 207.946746 \n", "318 5 1536 1536 471.859200 202.428668 207.751258 205.269221 \n", "319 5 1920 1920 737.280000 144.215478 179.177603 203.338037 \n", "\n", " dot dx dy arakawa cg \n", "0 56.162541 97.585482 39.256309 138.435948 126.542938 \n", "1 115.879737 183.928301 117.065735 308.217740 227.802475 \n", "2 137.448463 198.315441 143.189693 367.836204 248.862136 \n", "3 140.424998 207.967927 189.350724 359.265776 312.356009 \n", "4 157.659528 86.322418 106.536537 290.893499 244.174862 \n", ".. ... ... ... ... ... \n", "315 189.578161 126.820840 112.297043 147.858988 161.701097 \n", "316 185.692383 116.749053 103.895909 139.584366 150.029270 \n", "317 187.211376 123.177679 107.402446 141.847240 118.064374 \n", "318 104.123644 96.821422 78.527590 124.321659 133.102875 \n", "319 188.251876 123.057750 90.144151 133.416645 139.521228 \n", "\n", "[320 rows x 12 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#read in csv file\n", "df1 = pd.read_csv('benchmark_skl_mpi1.csv', delimiter=' ')\n", "#add size and get rid of non-relevant columns\n", "df1.insert(0,'size', 8*df1['n']*df1['n']*df1['Nx']*df1['Ny']/1e6)\n", "for name, mem in memops.items():\n", " df1[name] = df1['size']/1000*mem/df1[name]\n", "dfr = df1[['n','Nx','Ny','size']+list(memops.keys())]\n", "dfr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want to aggregate the results with the same input parameters n, Nx, Ny" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#compute mean and standard derivation of 'same' groups \n", "dfr=dfr.groupby(['n', 'Nx','Ny','size']).agg(['mean', 'std'])\n", "dfr=dfr.reset_index(level=['n','Nx','Ny','size'])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#dfr['axpby']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we compute the efficiency of the operations" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "base_bandwidth = dfr[('axpby','mean')].iloc[15] # base bandwidth at 3 2048 2048 \n", "for name, mem in memops.items():\n", " dfr[(name,'eff')]= dfr[(name,'mean')]/base_bandwidth\n", " dfr[(name,'eff_err')]=dfr[(name,'std')]/base_bandwidth\n", "#now display all bandwidth results" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "cols=[(m,'eff') for m in memops.keys()]\n", "efficiency=dfr[['n','Nx','Ny','size']].join( dfr[cols])\n", "cols=[(m,'eff_err') for m in memops.keys()]\n", "efficiency=efficiency.join( dfr[cols])\n", "#dfr=dfr.sort_values(by='size')\n", "#efficiency=efficiency.set_index('size')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nNxNysizescalaxpbypointwiseDotdotdxdyarakawacgscalaxpbypointwiseDotdotdxdyarakawacg
effeffeffeffeffeffeffeffeff_erreff_erreff_erreff_erreff_erreff_erreff_erreff_err
021441440.661.442.192.880.250.420.200.650.610.030.130.302.10e-027.98e-028.87e-031.38e-022.37e-02
831441441.493.165.036.830.460.840.320.890.800.920.140.186.79e-034.62e-024.47e-035.07e-035.07e-03
122882882.655.536.707.770.570.850.541.421.100.060.460.202.50e-023.30e-026.81e-031.07e-024.95e-02
1641441442.655.546.527.690.550.650.330.920.760.091.100.235.95e-022.42e-021.88e-031.11e-021.44e-02
2451441444.157.5910.8711.240.660.630.320.800.740.130.120.182.57e-022.75e-021.67e-033.84e-035.63e-03
223843844.728.849.519.190.690.910.651.681.220.200.270.343.64e-021.66e-023.16e-031.32e-025.82e-02
932882885.979.9210.179.730.700.800.551.311.050.150.490.492.35e-021.94e-023.11e-031.32e-021.95e-02
3257657610.6212.8011.925.940.670.940.851.681.450.670.500.972.72e-022.48e-021.43e-022.77e-022.66e-02
17428828810.6212.9112.256.060.680.730.491.071.060.180.420.824.33e-021.08e-022.67e-031.05e-028.21e-02
10338438410.6212.9712.246.050.690.810.611.291.260.210.380.892.34e-022.23e-024.82e-032.20e-021.81e-02
25528828816.5914.8612.293.210.780.600.440.810.860.103.220.382.44e-021.00e-025.58e-032.16e-022.40e-02
4276876818.8715.102.472.980.790.400.721.311.130.440.040.165.68e-022.80e-038.21e-023.37e-021.56e-02
18438438418.8715.202.502.900.810.340.410.830.860.220.020.233.00e-025.37e-042.38e-033.18e-026.27e-03
11357657623.8916.129.122.490.810.850.720.971.010.152.960.114.68e-025.69e-032.78e-036.91e-031.43e-02
26538438429.4912.764.821.720.810.590.500.680.782.411.140.073.91e-027.62e-033.21e-025.89e-031.13e-02
12376876842.479.243.371.260.850.800.710.870.941.070.660.034.37e-021.70e-021.15e-027.37e-036.82e-03
19457657642.478.933.691.270.850.720.600.770.841.830.370.024.74e-029.94e-031.09e-027.72e-036.55e-03
521152115242.478.013.921.250.830.970.920.971.042.780.310.038.50e-021.50e-025.11e-031.33e-025.36e-03
27557657666.364.641.991.110.830.580.510.670.731.370.140.022.51e-022.74e-033.78e-034.70e-033.24e-03
621536153675.505.021.621.070.800.880.860.860.920.630.100.024.04e-021.89e-023.70e-022.64e-021.29e-02
\n", "
" ], "text/plain": [ " n Nx Ny size scal axpby pointwiseDot dot dx dy arakawa \\\n", " eff eff eff eff eff eff eff \n", "0 2 144 144 0.66 1.44 2.19 2.88 0.25 0.42 0.20 0.65 \n", "8 3 144 144 1.49 3.16 5.03 6.83 0.46 0.84 0.32 0.89 \n", "1 2 288 288 2.65 5.53 6.70 7.77 0.57 0.85 0.54 1.42 \n", "16 4 144 144 2.65 5.54 6.52 7.69 0.55 0.65 0.33 0.92 \n", "24 5 144 144 4.15 7.59 10.87 11.24 0.66 0.63 0.32 0.80 \n", "2 2 384 384 4.72 8.84 9.51 9.19 0.69 0.91 0.65 1.68 \n", "9 3 288 288 5.97 9.92 10.17 9.73 0.70 0.80 0.55 1.31 \n", "3 2 576 576 10.62 12.80 11.92 5.94 0.67 0.94 0.85 1.68 \n", "17 4 288 288 10.62 12.91 12.25 6.06 0.68 0.73 0.49 1.07 \n", "10 3 384 384 10.62 12.97 12.24 6.05 0.69 0.81 0.61 1.29 \n", "25 5 288 288 16.59 14.86 12.29 3.21 0.78 0.60 0.44 0.81 \n", "4 2 768 768 18.87 15.10 2.47 2.98 0.79 0.40 0.72 1.31 \n", "18 4 384 384 18.87 15.20 2.50 2.90 0.81 0.34 0.41 0.83 \n", "11 3 576 576 23.89 16.12 9.12 2.49 0.81 0.85 0.72 0.97 \n", "26 5 384 384 29.49 12.76 4.82 1.72 0.81 0.59 0.50 0.68 \n", "12 3 768 768 42.47 9.24 3.37 1.26 0.85 0.80 0.71 0.87 \n", "19 4 576 576 42.47 8.93 3.69 1.27 0.85 0.72 0.60 0.77 \n", "5 2 1152 1152 42.47 8.01 3.92 1.25 0.83 0.97 0.92 0.97 \n", "27 5 576 576 66.36 4.64 1.99 1.11 0.83 0.58 0.51 0.67 \n", "6 2 1536 1536 75.50 5.02 1.62 1.07 0.80 0.88 0.86 0.86 \n", "\n", " cg scal axpby pointwiseDot dot dx dy arakawa \\\n", " eff eff_err eff_err eff_err eff_err eff_err eff_err eff_err \n", "0 0.61 0.03 0.13 0.30 2.10e-02 7.98e-02 8.87e-03 1.38e-02 \n", "8 0.80 0.92 0.14 0.18 6.79e-03 4.62e-02 4.47e-03 5.07e-03 \n", "1 1.10 0.06 0.46 0.20 2.50e-02 3.30e-02 6.81e-03 1.07e-02 \n", "16 0.76 0.09 1.10 0.23 5.95e-02 2.42e-02 1.88e-03 1.11e-02 \n", "24 0.74 0.13 0.12 0.18 2.57e-02 2.75e-02 1.67e-03 3.84e-03 \n", "2 1.22 0.20 0.27 0.34 3.64e-02 1.66e-02 3.16e-03 1.32e-02 \n", "9 1.05 0.15 0.49 0.49 2.35e-02 1.94e-02 3.11e-03 1.32e-02 \n", "3 1.45 0.67 0.50 0.97 2.72e-02 2.48e-02 1.43e-02 2.77e-02 \n", "17 1.06 0.18 0.42 0.82 4.33e-02 1.08e-02 2.67e-03 1.05e-02 \n", "10 1.26 0.21 0.38 0.89 2.34e-02 2.23e-02 4.82e-03 2.20e-02 \n", "25 0.86 0.10 3.22 0.38 2.44e-02 1.00e-02 5.58e-03 2.16e-02 \n", "4 1.13 0.44 0.04 0.16 5.68e-02 2.80e-03 8.21e-02 3.37e-02 \n", "18 0.86 0.22 0.02 0.23 3.00e-02 5.37e-04 2.38e-03 3.18e-02 \n", "11 1.01 0.15 2.96 0.11 4.68e-02 5.69e-03 2.78e-03 6.91e-03 \n", "26 0.78 2.41 1.14 0.07 3.91e-02 7.62e-03 3.21e-02 5.89e-03 \n", "12 0.94 1.07 0.66 0.03 4.37e-02 1.70e-02 1.15e-02 7.37e-03 \n", "19 0.84 1.83 0.37 0.02 4.74e-02 9.94e-03 1.09e-02 7.72e-03 \n", "5 1.04 2.78 0.31 0.03 8.50e-02 1.50e-02 5.11e-03 1.33e-02 \n", "27 0.73 1.37 0.14 0.02 2.51e-02 2.74e-03 3.78e-03 4.70e-03 \n", "6 0.92 0.63 0.10 0.02 4.04e-02 1.89e-02 3.70e-02 2.64e-02 \n", "\n", " cg \n", " eff_err \n", "0 2.37e-02 \n", "8 5.07e-03 \n", "1 4.95e-02 \n", "16 1.44e-02 \n", "24 5.63e-03 \n", "2 5.82e-02 \n", "9 1.95e-02 \n", "3 2.66e-02 \n", "17 8.21e-02 \n", "10 1.81e-02 \n", "25 2.40e-02 \n", "4 1.56e-02 \n", "18 6.27e-03 \n", "11 1.43e-02 \n", "26 1.13e-02 \n", "12 6.82e-03 \n", "19 6.55e-03 \n", "5 5.36e-03 \n", "27 3.24e-03 \n", "6 1.29e-02 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.set_option('precision',2)\n", "efficiency=efficiency.sort_values(by='size')\n", "#efficiency.loc[:,'size']\n", "efficiency.iloc[0:20]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us try and make our first plot" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig=plt.figure()\n", "#print(efficiency)\n", "toPlot=efficiency['dy'].join(efficiency['size'])\n", "ax = toPlot.plot(style='ro',x='size',y='eff',yerr='eff_err')\n", "toPlot=efficiency['dx'].join(efficiency['size'])\n", "ax = toPlot.plot(style='ro',x='size',y='eff',yerr='eff_err',ax=ax)\n", "toPlot=efficiency['dot'].join(efficiency['size'])\n", "ax = toPlot.plot(style='ro',x='size',y='eff',yerr='eff_err',ax=ax)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "ax.legend(['dy','dx','dot'])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,ax=plt.subplots(1,1,figsize=(8,5),dpi= 80, facecolor='w', edgecolor='k')\n", "plotlist = [('dy','eff')]\n", "stylelist = ['ro','bo','go','yo']\n", "#efficiency.iloc[8:24].plot(x=('size',''),y=[('cg','eff'),('arakawa','eff')],style=['ro','bo'],logx=True)\n", "efficiency[efficiency['n']==2].plot(ax=ax, x=('Nx',''),y=plotlist,style=stylelist[0])\n", "efficiency[efficiency['n']==3].plot(ax=ax, x=('Nx',''),y=plotlist,style=stylelist[1])\n", "efficiency[efficiency['n']==4].plot(ax=ax, x=('Nx',''),y=plotlist,style=stylelist[2])\n", "efficiency[efficiency['n']==5].plot(ax=ax, x=('Nx',''),y=plotlist,style=stylelist[3])\n", "#plt.loglog()\n", "plt.title(plotlist[0][0])\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.ylabel('efficiency')\n", "plt.xlabel('Nx')\n", "plt.legend(['n=2','n=3','n=4','n=5'])\n", "plt.show()\n", "#base_bandwidth" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.9.7" } }, "nbformat": 4, "nbformat_minor": 2 }