Skip to content

Instantly share code, notes, and snippets.

@taldcroft
Created July 31, 2014 01:32
Show Gist options
  • Save taldcroft/c0034f876604673e62e8 to your computer and use it in GitHub Desktop.
Save taldcroft/c0034f876604673e62e8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:b42dc62c52256a5ad10132c8c054384342edb41fd8f75a3785d5248935849627"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd\n",
"from cStringIO import StringIO\n",
"import random\n",
"from decimal import Decimal\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def xstrtod(s):\n",
" return pd.read_csv(StringIO(s), header=None)[0][0]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def randnum():\n",
" s = '1.' # Start with 1, otherwise you can randomly get very small numbers\n",
" for i in range(20):\n",
" s += random.choice('0123456789')\n",
" return s"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 117
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def ulp(s):\n",
" num = Decimal(s)\n",
" f = np.float64(s)\n",
" a = f.view((np.uint8, 8))\n",
" # Since this is uint8 make sure the result doesn't accidentally wrap\n",
" if a[0] == 0:\n",
" a[0] = 1\n",
" elif a[0] == 255:\n",
" a[0] = 254\n",
" elif Decimal(f) < num:\n",
" a[0] += 1\n",
" elif Decimal(f) > num:\n",
" a[0] -= 1\n",
" f2 = a.view(np.float64)[0]\n",
" return abs(f2 - f)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 118
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"n_vals = 10000\n",
"y = np.empty(n_vals)\n",
"good_vals = 0\n",
"ulp_vals = np.empty(n_vals)\n",
"diffs = np.empty(n_vals)\n",
"\n",
"for i in range(n_vals):\n",
" val = randnum()\n",
" guess = xstrtod(val)\n",
" decimal_ulp_val = Decimal(ulp(val))\n",
" ulp_vals[i] = float(decimal_ulp_val / Decimal(1e-16))\n",
" decimal_diff = abs(Decimal(val) - Decimal(guess))\n",
" ulp_diff = decimal_diff / decimal_ulp_val\n",
" y[i] = float(ulp_diff)\n",
" diffs[i] = float(decimal_diff)\n",
" if float(ulp_diff) < 1.0:\n",
" good_vals += 1"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 119
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print('{0}% of values within 1.0 ULP'.format(good_vals * 100.0 / 10000))\n",
"plt.hist(y, bins=30, log=True)\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"71.2% of values within 1.0 ULP\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x11028f2d0>"
]
}
],
"prompt_number": 120
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# OK, the ULP is always very near 2**-52 which is one bit in the\n",
"# 52-bit mantissa (http://kipirvine.com/asm/workbook/floating_tut.htm)\n",
"plt.hist(ulp_vals, bins=50)\n",
"plt.xlabel('ULP / 1e-16')\n",
"plt.grid()\n",
"plt.show()\n",
"np.min(ulp_vals)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n7vi2AAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x10c8839d0>"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 121,
"text": [
"2.2204460492503131"
]
}
],
"prompt_number": 121
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.hist(diffs, bins=50, log=True)\n",
"plt.xlabel('Diff')\n",
"plt.grid()\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAESCAYAAADzBx6nAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFf5JREFUeJzt3X+sZGdZwPHvZe9WRHdKL0WUsubSUqU14FZiW1RkKjFZ\n/EEjSEj9EQpE9A9QYkwK/mBno8aYGFKlUYjSLoZYxB8JrbE0KH2lEQGJXViQYilusmVNo7awVyFI\nYf3jndsz987MvWfmzJz3fc98P8mkd87MPO/TN3efe+Y557wHJEmSJEmSJEmSJEmSJEmSJEmSJKkj\nDiwh5rOB3wReCfSA+5YwhiQpA08A3pM6CUlSPbcCDwOndm0/CtwPPADcNLL9x4G7gJe2kp0kqbEX\nAFexs9AfAD4LbAIHgZPAFbs+9942kpMkTbde8333Egv6qKuJhf708Pm7geuBbyHuyT8RuKdxhpKk\nRuoW+kkuAc6MPH8IuAb4h+FDkpSBJoX+fJOBn/70p58/e/ZskxCStIoeBJ41ywee0GCwzwOHR54f\nJu7V13L27FnOnz/v4/x5jh07ljyHXB7OhXPhXOz9AC6btVg3KfQfAy4n9u4vAF4B3NEg3so6ffp0\n6hSy4VxUnIuKc9FM3UJ/O/Ah4DuIfflXAY8BrwPuBv4V+HPg07MMPhgMCCHM8hFJWkkhBAaDwVyf\nXVtsKjM5P/wasvJCCPT7/dRpZMG5qDgXFeeisra2BjPWbgu9JBVknkLfpEevBbF9VXEuKs5Fxblo\npsnplY3deOONHDlyhKuuuurxbYcPH+bSSy9NmJUk5SeEMPcfvKStmwsv/MEdGx577It8+cv38/Wv\nf2XiBw4duohz5x5pIzdJylJxPfrxa67+EfgBpl+LtYZ9fUmrbAV69Ousra2NPXq9jdSJNWL/seJc\nVJyLinPRTNIePQyA/vBRx2NM2tvf2kr5xUSSlq/YHv08rZvJrx0k/hHYyZ6+pK6Zp3WTeI9+UdzT\nl6RpCuvRz2pyTz8+Lsim32//seJcVJyLinPRTEf26KeZvKcfTW4D+S1AUtck7tEfY+fB2Hl79LNu\n3+s1+/2S8rN9MPb48ePQ9fPol1/op2/3HH5Jqa3AefT56fU2ph4HqNvvt/9YcS4qzkXFuWim4z36\n5dvaepRp3xrs90vKga2b2tsn9+4jl2yQ1I4VPo++DdPO4HGvXVLeEvfoB0BIm0IG7D9WnIuKc1Fx\nLprdSjCDQt9Pm4IkFaDf75d5z9iyevTzjDGtr38Q+OrYVs/Vl7Qfe/TZ2auv71W5ktrhefRZCKkT\nyIa92IpzUXEumrHQS1LH2aPPbAzPu5e0lwJ79ANmu8OUJK2mJneY8vTKLITUCWTDXmzFuag4F81O\nr7RHn5UybpQiqSz26IsYY+/P2NeXVofLFEuSxljosxBSJ5ANe7EV56LiXDRjoS/e5L6+vXtJ2+zR\nFzHGfLHs3UvdY49ekjTGQp+FkDqBbNiLrTgXFeeiGa+MlaQCNLky1h59EWPMF8sevdQ99uglSWMs\n9FkIrY7W621ke0qmvdiKc1FxLprxDlMraGvrUbzDlbQ67NEXMcZ8sab16GOPz76+VKIC16PX8qxv\n/0JIWnH26LMQlhBz+8bkkx75shdbcS4qzkUzFnpJ6jh79EWM0Vasg8RvAjsdOnQR5849MiWWpDbZ\no1dD2+2enTwbRyqbrZsshNQJZMNebMW5qDgXzVjoJanjEvfoj7FzUTN79LnG8vx6Ka3tRc2OHz8O\nM9ZuD8YWMUbqWJMP0oIHaqW2uahZsULqBPYx/Zz8uJzC4tiLrTgXFeeiGQu9JHWcrZsixsg7lv17\nqT22biRJYyz0WQipE8iGvdiKc1FxLpqx0Kuh9WxvYiIpskdfxBhlxrJ3Ly2ePXpJ0hgLfRZC6gSy\nYS+24lxUnItmLPSS1HH26IsYo8RYrm0vLYPr0Ssjrm0v5cLWTRZC6gSyYS+24lxUnItmLPRq2eTz\n7j33XlqeZX2Pvh74UaAHvAN4/4T32KM31thrnnsv7S2nHv17h48nA7/H5EIvSWrBLK2bW4GHgVO7\nth8F7gceAG7a9dqvA7fMnd3KCKkTyIa92IpzUXEumpml0N9GLOqjDhAL+VHgSuAG4Ari14rfBe4C\nTjZPU6thneuuu87evbRgs/boN4E7gecMnz+feOPX7T8Abxz+93+BVwL/TCz0b58Qyx69sWp/xt69\nFKXo0V8CnBl5/hBwDfB64K0NY0uSFqBpoW+4m3Uj8UsCxOO2B0ZeC8P/9nc93+/1uu/f3ras99d9\nvT/hvYsYf9r793s+Ld6s7582/n7xtz+z8/XtHm2/vzrPT548yRve8IZs8kn5/Oabb+bIkSPZ5NPm\n8xACJ06cAGBzc5N5NG3dXAsMqFo3bwK+TuzP78fWzeMCsaClb5Gkj3UPO/9YxO2r2LoJITz+D3/V\nOReVeVo3TQv9OvAZ4EXAWeCjxAOyn64Ry0JvrNqfWcVCL02y7B797cALgacQ+/JvJp6J8zrgbmLf\n5R3UK/JDA+LeW3+GNLR61rd/uXdwgTStkhDC3KeZunplFmMEbN1svza5dbOKe/q2KyrORcU7TEmS\nxrhHX8QYxlrFPXppkpzWuqlpgD16SdqfPfri9+gD9ui3X5ulRz/5LlbQjQO19qUrzkWlwD16qYnJ\nd7EC72QljXKPvogxjDVPLPv36iLPupEkjUlc6Ae4Fjs4B6NC6gSy4RrsFecizsFgMJjrsxkU+n7a\nFCSpAP1+f+5Cb4++iDGMZY9eiuzRS5LGWOizEFInkJGQOoFs2JeuOBfNeGWsJBXAK2Pt0Rtrwmv2\n6NVF9uilx8U17Hc/er2N1IlJrbPQZyGkTiAjYUFxtpdH2PnY2np0QfGXz750xbloxkIvAb3exsRv\nAH4LUBck7tEfY+fBWHv0xlp+rEm9+9j3tN+vfG0fjD1+/DjMWLs9GFvEGMay0EuRB2OLFVInkJGQ\nOoFs2JeuOBfNWOglqeNs3RQxhrFs3UiRrRtJ0hgLfRZC6gQyEpYcf/KFVDmyL11xLprxnrFaMdPu\nM5tnsZcWwUXNstBPnUBG+qkTqK3X25h4pe2hQxdx7twjjeP3+/3GMbrCuXBRszm2LzJW+oOLxlp+\nrNkO4HrwVsvjwdhihdQJZCSkTiAb9qUrzkUzFnpJ6jhbN0WMYazUsWzdKBe2biRJYyz0WQipE8hI\nSJ1ANuxLV5yLZiz0ktRx9uiLGMNYqWPZo1cu5unRe8GUtK/1GZdJmPz+RV1IpdXkBVPF79EH4h+7\nMvd2FxvrHsb/8OeQ1yJiHSQuwTBu0h+BEIJXhA45F5UC9+ilVTJtnR3Y2jrotwAtjXv0RYxhrG7E\nmm8M+/0a5Xn0kqQxFvoshNQJZCSkTiAjIXUC2fA8+mYs9JLUcfboixjDWN2IZY9ezdmjlySNsdBn\nIaROICMhdQIZCakTyIY9+mYs9JLUcfboixjDWN2IZY9ezdmjlySNSVzoB9iHBOdgVEidQEZC6gSy\nYY8+zsFgMJjrsxkU+n7aFCSpAP1+f+5Cb4++iDGM1Y1Y9ujVnD16SdIYC30WQuoEMhJSJ5CRkDqB\nbNijb8ZCLxWo19tgbW1t4qPX20idnjJjj76IMYzVjViL69FPv1/t9M+oG+zRS52zPnGvvS3Tvjn4\nraEsFvoshNQJZCSkTiAjger2g7sf7djaenTi+HF7e+zRN2Ohl6SOs0dfxBjG6kas9vJdVI9++rEA\njwOkYo9ekjTGQp+FkDqBjITUCWQkpE4gG/bom7HQS1LH2aMvYgxjdSOWPXo1Z49ekjTGQp+FkDqB\njITUCWQkpE4gG/bom1lfQsxnAr8GXAi8fAnxJe1pfcrVsweBr86wXV2xzB79X7B3obdHb6wVi1Va\nvnt/xh59Gsvs0d8KPAyc2rX9KHA/8ABw0ywDS5LaUbfQ30Ys6qMOALcMt18J3ABcsbjUVklInUBG\nQuoEMhJSJ5ANe/TN1C309wK7VzG6GvgscJrY4Hs3cD2wAbwNOIJ7+ZKUXJODsZcAZ0aePwRcAzwC\n/EK9EDcCm8Ofn0z8krAtDP/b3/V8v9frvn9727LeX/f1/vCx6PGnvX+/59Pizfr+aePPGr+t8ae9\nf97xZ33/tPFnff+848/6/riX3e/3H/8ZWNrztsfL6XkIgRMnTgCwubnJPGZp6G8CdwLPGT5/GbFt\n83PD5z9DLPSvrxnPg7HGWrFYpeW792c8GJtG2xdMfR44PPL8MHGvXjMLqRPISEidQEZC6gSyYY++\nmSaF/mPA5cQ9/QuAVwB3LCAnSdIC1e3R3w68EHgKsS//ZuKZOK8D7iY2198BfHq24QdUPepV1k+d\nQEb6qRPISD91AtkY7dWvqhDC3N9sXNSsiDGM1Y1YpeW792fs0afhombFCqkTyEhInUBGQuoEsmGP\nvhkLvSR13DIWNZvBAHv04P//qH7qBDLST51AUr3eBltbu6/TjA4duohz5x5JEisVe/T2XY1VRKzS\n8t37M8vu0U+/6cns4y8yVmr26IsVUieQkZA6gYyE1AlkJKROoGgWeknqOHv0WeinTiAj/dQJZKSf\nOoGZzdML3+szlX7z5Apnj96+q7GKiFVavnt/ZlJfe55e+F43ILdHP84efbFC6gQyElInkJGQOoGM\nhNQJFM1CL0kdZ+umiDGM1Y1YpeW792ds3aQxT+vGg7GSWrK+XaQ0Bw/GFr+XFoh/7NLvpaWPdQ/j\nf/hzyCvF70oArltQrEXmFbfPs0c/f16Bnb8X7tHP8hl79JLUce7RFzGGsboRq7R89/5Mu3v09caf\nxj16SVKnWeizEFInkJGQOoGMhNQJZCSkTqBonnUjSQXwrBv7rsYqIlZp+e79GXv0adijlySNsdBn\nIaROICMhdQIZCakTyEhInUDRLPSS1HH26IsYw1jdiFVavnt/xh59GvboJUljEhf6AfbewDkYFVIn\nkJGQOoE9xAXKdj+WJ9R6V6+30XJe7QkhMBgM5vqsrZssxgi4qNn2a/fgombbAjkvatZurECdRc3a\nWPI4tXlaNxb6IsYwVjdilZZv3rEs9PXZo5ekjrPQZyGkTiAjIXUCGQmpE8hISJ1A0Sz0ktRx9uiL\nGMNY3YhVWr55x7JHX5979JLUcRb6LITUCWQkpE4gIyF1AhkJqRMomuvRSyrQemcuhKrL9ejtuxqr\niFil5bs6sezRS5KKZqHPQkidQEZC6gQyElInkJGQOoGiWeglqePs0RcxhrG6Eau0fFcnlj16SVLR\nLPRZCKkTyEhInUBGQuoEMhJSJ1A0C70kdZw9+iLGMFY3YpWW7+rEskcvSSqahT4LIXUCGQmpE8hI\nSJ1ARkLqBIpmoZekjnNRsyz0UyeQkX7qBDLST51ARvqpE6il19tga+vRse2HDl3EuXOPNIrtomYe\nYDNWEbFKy3d1Yi3qYOxeNz5Z7BgejC1QSJ1ARkLqBDISUieQkZA6gaJZ6CWp42zdFDGGsboRq7R8\nVyeWrRtJUtEs9FkIqRPISEidQEZC6gQyElInUDQLvSR1nD36IsYwVjdilZbv6sSyRy9JKpqFPgsh\ndQIZCakTyEhInUBGQuoEimahl6SOs0dfxBjG6kas0vJdnVj26CVJRbPQZyGkTiAjIXUCGQmpE8hI\nSJ1A0Sz0ktRx9uiLGMNY3YhVWr6rE6vrPfpl3Hjkm4A/BL5C/L71Z0sYQ5JU0zJaNy8F3gO8FnjJ\nEuJ3UEidQEZC6gQyElInkJGQOoGi1S30twIPA6d2bT8K3A88ANw03HYJcGb489eaJrgaTqZOICPO\nRcW5qDgXTdQt9LcRi/qoA8Atw+1XAjcAVwAPAYdnjL/ivpA6gYw4FxXnouJcNFG3EN8L7L7j7dXA\nZ4HTwFeBdwPXA38NvIzYp79jIVlKkubW5GDsaIsG4p78NcCXgFc3SWr1nE6dQEZOp04gI6dTJ5CR\n06kTKFqTQt/0XKEHYe2yyS/tdebQtNdm3b7IWIsY450LjLXf9pxjvZNqLprGyvH/sbR8c4q1+/di\ncXkNT1lckMmxFjjGg7N+oEmh/zxVL57hzw/N8PlnNRhbkrQEm+w862ad+JdlE7iAeFj8itazkiQt\nxO3AWeJFUGeAVw23vxj4DPGg7JvSpCZJSm3Sufa7/cHw9Y8DV7WUVwr7zcVPE+fgE8T1IJ7bXmqt\nqvM7AfC9wGPEi/C6qs5c9IH7gE/S7SuH9puLi4H3EbsHnwRubC2z9k27dmlUNnXzAHFvfxM4yOT2\nzo8Afzv8+Rrgw20l17I6c/F84MLhz0fp5lzUmYft930A+Bvi6bpdVGcungx8CnjG8PnFbSXXsjpz\nMQB+Z/jzxcB/s5xlXHLwAmLxnlboZ6qby76gadq59qNeQnU4/SPEX+ynLTmvFOrMxT8BXxz+/BGq\nf9xdUmceAF4P/CXwn61l1r46c/FTwF9RnejwX20l17I6c/EfQG/4c49Y6B9rKb+2Tbp2adRMdXPZ\nhX7SufaX1HhPFwtcnbkY9Rqqv9hdUvd34nrgj4bPF7PsX37qzMXlwAZwD/Ax4GfbSa11debij4Hv\nIh4v/DjwS+2klqWZ6uayv/bU/Qe6+wTTLv7DnuX/6TriRWffv6RcUqozDzcDbxy+d420y2kvU525\nOAh8D/Ai4EnEb30fJvZmu6TOXPwqsaXTBy4D3g98N7C1vLSyVrtuLrvQ1znXfvd7njHc1jV1rzt4\nLnHP5Sh7f3UrVZ15eB7xqzvEXuyLiV/nu7akRp25OENs13x5+Pggsbh1rdDXmYvvA357+PODwL8D\n30n8prNqsqqbdc61Hz2ocC3dPAAJ9ebi24l9ymtbzaxds15/cRvdPeumzlw8G/g74sHKJxEPzl3Z\nXoqtqTMXbwGODX9+GvEPwUZL+aWwSb2DsVnUzUnn2v/88LHtluHrHyd+Te2q/ebiT4gHmO4bPj7a\ndoItqfM7sa3LhR7qzcWvEM+8OQX8YqvZtWu/ubgYuJNYJ04RD1R31fa1S/9H/Fb3ala3bkqSJEmS\nJEmSJEmSJKkL6iw4Nov3Ea+ZuXPX9hPA56jOwuvqIoeSlJ39Fhyb1Q8BP8Z4oV/YqcXLXutGytHX\nqJb9PQn8MtXl5M8Dfn/48zcQL1a6D3g58R/4p4B/AZ7YYr7Ky6QFxy4D7iJepftB4hW7dX0A+J8p\nr3V1+Q9p6UbXRnkqcc2UwYT3XTt8bdvbiPcMkDbZuUf/91S3R71m+HwWfSbv0f8b8YKotxCvGJZU\n0+5FsJ5Jtfxvn/gP7qnEqw6/QNyjfy3xquXPAe9qJUvlbJOq0H8z8CWqXvp9xG9+EFsvpyY87toV\nr894of/W4X8vIPbrf2NBuUsrYdJqh48Si3uf6h/cC9n5j6/ryzGovk2qQt8jLlfQxO7ftVlf35M9\nemm6Sf1Re6ba7RxxJc2fHD5fY/YzZCb9Xn3byGs/QYODvxZ6CS4lHqDt8t2stDi3Ax8iHnA9A7yK\neOzmNVT3s33JDPHuBd5DvOfAGeCHh9vfRbx/9CeIq3T+1rwJd/V+i1JdTyUeZH1r6kRUjBumbH/x\nnPFeMGX7i+aMN8ZCr1X0jcQDZgeJ9xz9U+JZDRDv0nN+ws+MbJMkSZIkSZIkSZIkSZIkSZIkSZIk\nSSn8P4GGBnniDU56AAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x10de77750>"
]
}
],
"prompt_number": 122
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = np.float64(1.23123123123123123123)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 123
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"a = x.view((np.uint8, 8))\n",
"a"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 124,
"text": [
"array([ 50, 59, 255, 132, 31, 179, 243, 63], dtype=uint8)"
]
}
],
"prompt_number": 124
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"y0 = a.view(np.float64)[0]\n",
"a[0] += 1\n",
"y1 = a.view(np.float64)[0]\n",
"np.abs(y1 - y0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 125,
"text": [
"2.2204460492503131e-16"
]
}
],
"prompt_number": 125
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"2**-52"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 126,
"text": [
"2.220446049250313e-16"
]
}
],
"prompt_number": 126
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment