{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# set default figure size\n", "pylab.rcParams['figure.figsize'] = (20.0, 9.0)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "import netCDF4 as nc\n", " \n", "def plot_grid(ax, path, points=False, point_color='k', point_size=4, point_alpha=0.6, point_marker='o',\n", " cells=True, cell_color='black', cell_alpha=0.2, cell_values=None, cells_colorbar=False,\n", " cell_centers=False, cell_links=False, cell_labels=False, cell_labels_variable='domain', \n", " boundary_edges=False):\n", "\n", " # read grid\n", " ds = nc.Dataset(path)\n", " x = ds.variables['NetNode_x'][:]\n", " y = ds.variables['NetNode_y'][:]\n", " z = ds.variables['NetNode_z'][:]\n", " cell_points = ds.variables['NetElemNode'][:]\n", " \n", " if points:\n", " ax.plot(x, y, point_color + point_marker, markersize=point_size, linestyle='', alpha=point_alpha)\n", "\n", " if cells:\n", " # construct collection of polygon vertices, list of lists of (x,y) tuples\n", " cell_sizes = (cell_points > 0).sum(1)\n", " cell_count = len(cell_points)\n", " \n", " print cell_sizes\n", " \n", " all_cell_coords = []\n", " for i in range(cell_count):\n", " cell_size = cell_sizes[i]\n", " cell_coords = []\n", " \n", " for j in range(cell_size):\n", " index = cell_points[i, j] - 1\n", " cell_coords.append((x[index], y[index]))\n", " all_cell_coords.append(cell_coords)\n", "\n", " polygons = matplotlib.collections.PolyCollection(all_cell_coords)\n", " polygons.set_alpha(cell_alpha)\n", " \n", " if cell_values != None: \n", " #polygons.clim=(min(cell_values), max(cell_values))\n", " polygons.set_array(cell_values)\n", " else:\n", " polygons.set_facecolor(cell_color)\n", " \n", " if cells_colorbar:\n", " cb = plt.colorbar(polygons, ax=ax) \n", " cb.set_label('cell values')\n", " \n", " polygons.set_edgecolor(cell_color) \n", " ax.add_collection(polygons)\n", " \n", " if cell_centers:\n", " xcc = ds.variables['FlowElem_xcc'][:]\n", " ycc = ds.variables['FlowElem_ycc'][:] \n", " ax.plot(xcc, ycc, 'bo', markersize=4, linestyle='', alpha=point_alpha)\n", " \n", " if cell_labels:\n", " xcc = ds.variables['FlowElem_xcc'][:]\n", " ycc = ds.variables['FlowElem_ycc'][:]\n", " # cell_labels_list = range(len(xcc))\n", "\n", " if cell_labels_variable == 'domain':\n", " cell_labels_list = ds.variables['FlowElemDomain'][:]\n", " elif cell_labels_variable == 'index':\n", " cell_labels_list = np.arange(len(xcc)) + 1\n", " \n", " for xc, yc, n in zip(xcc, ycc, cell_labels_list):\n", " ax.annotate('{}'.format(n), xy=(xc, yc), xytext=(-3, 0), ha='right', textcoords='offset points', \n", " fontweight='bold', fontsize=9)\n", " \n", " if cell_links:\n", " flow_links = ds.variables['FlowLink'][:]\n", " link_x = xcc[flow_links - 1]\n", " link_y = ycc[flow_links - 1]\n", "\n", " for line_x, line_y in zip(link_x, link_y):\n", " ax.add_line(matplotlib.lines.Line2D(line_x, line_y, alpha=0.7, linewidth=2, linestyle=':'))\n", "\n", " if boundary_edges:\n", " net_links = ds.variables['NetLink'][:]\n", " net_link_x = x[net_links - 1]\n", " net_link_y = y[net_links - 1]\n", " bnd_links = ds.variables['BndLink'][:]\n", " bnd_link_x = net_link_x[bnd_links-1, :]\n", " bnd_link_y = net_link_y[bnd_links-1, :]\n", "\n", " for line_x, line_y in zip(bnd_link_x, bnd_link_y):\n", " ax.add_line(matplotlib.lines.Line2D(line_x, line_y, alpha=0.8, color=cell_color, linewidth=3))\n", " \n", " ds.close()\n", "\n", " ax.autoscale()\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "grid_file = '../../test_data/data_local/maas/maasb2_net.nc'\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "ds = nc.Dataset(grid_file)\n", "x = ds.variables['NetNode_x'][:]\n", "y = ds.variables['NetNode_y'][:]\n", "z = ds.variables['NetNode_z'][:]\n", "cell_points = ds.variables['NetElemNode'][:]\n", "\n", "for i in ds.ncattrs():\n", " print i + ', ' + ds.getncattr(i)\n", "\n", "v = ds.variables['NetNode_x']\n", "for i in v.ncattrs():\n", " print i + ', ' + v.getncattr(i)\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "institution, Deltares\n", "references, http://www.deltares.nl\n", "source, Deltares, D-Flow FM Version 1.1.93.31890M, Jan 29 2014, 17:25:03, model\n", "history, Created on 2014-01-30T11:34:13+0100, D-Flow FM\n", "Conventions, CF-1.5:Deltares-0.1\n", "units, m\n", "standard_name, projection_x_coordinate\n", "long_name, x-coordinate of net nodes\n", "grid_mapping, projected_coordinate_system\n" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "\n", "f, ax = plt.subplots(1, 1)\n", "plot_grid(ax, grid_file, points=False)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "IndexError", "evalue": "index out of bounds", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0max\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mplot_grid\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mgrid_file\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpoints\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m\u001b[0m in \u001b[0;36mplot_grid\u001b[1;34m(ax, path, points, point_color, point_size, point_alpha, point_marker, cells, cell_color, cell_alpha, cell_values, cells_colorbar, cell_centers, cell_links, cell_labels, cell_labels_variable, boundary_edges)\u001b[0m\n\u001b[0;32m 33\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mindex\u001b[0m \u001b[1;33m>\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 34\u001b[0m \u001b[1;32mprint\u001b[0m \u001b[1;34m'Error: '\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mindex\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;34m\" \"\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mcell_size\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 35\u001b[1;33m \u001b[0mcell_coords\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 36\u001b[0m \u001b[0mall_cell_coords\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcell_coords\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 37\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mIndexError\u001b[0m: index out of bounds" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "[3 3 3 ..., 4 4 4]\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAABIQAAAIXCAYAAADt8IXhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHJ1JREFUeJzt3V9olff9wPHPkeTCSdG2FqlJwGqCiVhjIc6KtMRB0TmW\ngvUivSpWJAhFetfRXiz2oq29Gw0MO1rL+ic4RiGF2TOw9HS0zqasRWEtEp3SJBeyUMWBMO3p+V1s\nvzCrnhzjSdLm83pd5eH5+jyfmy+Jb57znEKlUqkEAAAAAGksmOsBAAAAAJhdghAAAABAMoIQAAAA\nQDKCEAAAAEAyghAAAABAMoIQAAAAQDJTBqEnn3wyli1bFvfff/9N1+zbty/a2tqis7Mzvvjii7oO\nCAAAAEB9TRmEdu3aFcVi8abnjxw5EqdPn46RkZF49dVXY+/evXUdEAAAAID6mjIIPfTQQ3HnnXfe\n9Px7770XTzzxREREbNy4MS5evBjnz5+v34QAAAAA1NVtv0NofHw8WlpaJo+bm5tjbGzsdi8LAAAA\nwAypy0ulK5XKNceFQqEelwUAAABgBjTc7gWamppidHR08nhsbCyampquW9fa2hpnzpy53dsBAAAA\n8F+rVq2K06dP3/K/u+0g1NPTEwMDA9Hb2xvHjx+PJUuWxLJly65bd+bMmeueJAJmXn9/f/T398/1\nGJCOvQdzx/6DuWHvwdyY7qe0pgxCjz/+eHz00UcxMTERLS0tsX///rh69WpERPT19cX27dvjyJEj\n0draGosWLYpDhw5NaxAAAAAAZseUQWhwcHDKiwwMDNRlGAAAAABmXl1eKg38cHV3d8/1CJCSvQdz\nx/6DuWHvwY9LoTJLL/YpFAreIQQAAABQR9PtLZ4QAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhG\nEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQ\nAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhAC\nAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIA\nAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAA\nAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAA\nSEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABI\nRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhG\nEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQ\nAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhAC\nAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASEYQAgAAAEhGEAIA\nAABIRhACAAAASEYQAgAAAEhGEAIAAABIRhACAAAASGbKIFQsFqO9vT3a2triwIED152fmJiIbdu2\nxfr162Pt2rXxxhtvzMScAAAAANRJoVKpVG52slwux+rVq+Po0aPR1NQUGzZsiMHBwejo6Jhc09/f\nH//+97/jxRdfjImJiVi9enWcP38+Ghoarr1RoRBVbgUAAADALZpub6n6hNDw8HC0trbGihUrorGx\nMXp7e2NoaOiaNffee29cunQpIiIuXboUd99993UxCAAAAIAfjqrlZnx8PFpaWiaPm5ub49NPP71m\nzZ49e+JnP/tZLF++PP71r3/FH/7wh5mZFAAAAIC6qBqECoXClBd44YUXYv369VEqleLMmTPxyCOP\nxIkTJ+KOO+64bm1/f//kz93d3dHd3X3LAwMAAABkVSqVolQq3fZ1qgahpqamGB0dnTweHR2N5ubm\na9YcO3YsnnvuuYiIWLVqVdx3331x6tSp6Orquu56/xuEAAAAALg133/AZv/+/dO6TtV3CHV1dcXI\nyEicO3curly5EocPH46enp5r1rS3t8fRo0cjIuL8+fNx6tSpWLly5bSGAQAAAGDmVX1CqKGhIQYG\nBmLr1q1RLpdj9+7d0dHREQcPHoyIiL6+vnj22Wdj165d0dnZGd999128/PLLcdddd83K8AAAAADc\nuqpfO1/XG/naeQAAAIC6mpGvnQcAAABg/hGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAA\nAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAA\nAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAA\nkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACS\nEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIR\nhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGE\nAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQA\nAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAA\nAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAA\nAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAA\nkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkhGEAAAAAJIRhAAAAACS\nEYQAAAAAkhGEAAAAAJIRhAAAAACSEYQAAAAAkpkyCBWLxWhvb4+2trY4cODADdeUSqV44IEHYu3a\ntdHd3V3vGQEAAACoo0KlUqnc7GS5XI7Vq1fH0aNHo6mpKTZs2BCDg4PR0dExuebixYuxefPm+POf\n/xzNzc0xMTERS5cuvf5GhUJUuRUAAAAAt2i6vaXqE0LDw8PR2toaK1asiMbGxujt7Y2hoaFr1rzz\nzjvx2GOPRXNzc0TEDWMQAAAAAD8cVYPQ+Ph4tLS0TB43NzfH+Pj4NWtGRkbim2++iS1btkRXV1e8\n+eabMzMpAAAAAHXRUO1koVCY8gJXr16Nzz//PD744IO4fPlybNq0KR588MFoa2u7bm1/f//kz93d\n3d43BAAAAHALSqVSlEql275O1SDU1NQUo6Ojk8ejo6OTHw37fy0tLbF06dJYuHBhLFy4MB5++OE4\nceLElEEIAAAAgFvz/Qds9u/fP63rVP3IWFdXV4yMjMS5c+fiypUrcfjw4ejp6blmzaOPPhoff/xx\nlMvluHz5cnz66aexZs2aaQ0DAAAAwMyr+oRQQ0NDDAwMxNatW6NcLsfu3bujo6MjDh48GBERfX19\n0d7eHtu2bYt169bFggULYs+ePYIQAAAAwA9Y1a+dr+uNfO08AAAAQF3NyNfOAwAAADD/CEIAAAAA\nyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJ\nCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkI\nQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhC\nAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIA\nAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAA\nAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAA\nAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAA\nyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJ\nCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkI\nQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhC\nAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIAAAAAyQhCAAAAAMkIQgAAAADJCEIA\nAAAAyUwZhIrFYrS3t0dbW1scOHDgpus+++yzaGhoiHfffbeuAwIAAABQX1WDULlcjqeeeiqKxWJ8\n+eWXMTg4GF999dUN1z3zzDOxbdu2qFQqMzYsAAAAALevahAaHh6O1tbWWLFiRTQ2NkZvb28MDQ1d\nt+6VV16JnTt3xj333DNjgwIAAABQH1WD0Pj4eLS0tEweNzc3x/j4+HVrhoaGYu/evRERUSgUZmBM\nAAAAAOqlodrJWuLO008/HS+99FIUCoWoVCpVPzLW398/+XN3d3d0d3fXPCgAAABAdqVSKUql0m1f\np1CpUnCOHz8e/f39USwWIyLixRdfjAULFsQzzzwzuWblypWTEWhiYiJ+8pOfxO9+97vo6em59kb/\nDUYAAAAA1Md0e0vVIPTtt9/G6tWr44MPPojly5fHT3/60xgcHIyOjo4brt+1a1f88pe/jB07dtRt\nQAAAAABubLq9pepHxhoaGmJgYCC2bt0a5XI5du/eHR0dHXHw4MGIiOjr65vetAAAAADMmapPCNX1\nRp4QAgAAAKir6faWqt8yBgAAAMD8IwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQj\nCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMI\nAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgB\nAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEA\nAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAA\nACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAA\nJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAk\nIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQj\nCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMI\nAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgB\nAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEAAAAkIwgBAAAAJCMIAQAAACQjCAEA\n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\nAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 15 } ], "metadata": {} } ] }