{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Meshes / Surfaces\n",
    "Meshes (or surfaces) in ipyvolume consist of triangles, and are defined by their coordinate (vertices) and faces/triangles, which refer to three vertices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import ipyvolume.pylab as p3\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Triangle meshes\n",
    "Lets first construct a 'solid', a [tetrahedron](https://en.wikipedia.org/wiki/Tetrahedron#Formulas_for_a_regular_tetrahedron), consisting out of 4 vertices, and 4 faces (triangles) using [plot_trisurf](api.html#ipyvolume.pylab.plot_trisurf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "s = 1/2**0.5\n",
    "# 4 vertices for the tetrahedron\n",
    "x = np.array([1.,  -1, 0,  0])\n",
    "y = np.array([0,   0, 1., -1])\n",
    "z = np.array([-s, -s, s,  s])\n",
    "# and 4 surfaces (triangles), where the number refer to the vertex index\n",
    "triangles = [(0, 1, 2), (0, 1, 3), (0, 2, 3), (1,3,2)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d8b541128a014a6bbc675788578bba0d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "p3.figure()\n",
    "# we draw the tetrahedron\n",
    "p3.plot_trisurf(x, y, z, triangles=triangles, color='orange')\n",
    "# and also mark the vertices\n",
    "p3.scatter(x, y, z, marker='sphere', color='blue')\n",
    "p3.xyzlim(-2, 2)\n",
    "p3.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Surfaces\n",
    "To draw [parametric surfaces](https://en.wikipedia.org/wiki/Parametric_surface), which go from $\\Bbb{R}^2 \\rightarrow \\Bbb{R}^3$, it's convenient to use [plot_surface](api.html#ipyvolume.pylab.plot_surface), which takes 2d numpy arrays as arguments, assuming they form a regular grid (meaning you do not need to provide the triangles, since they can be inferred from the shape of the arrays). Note that [plot_wireframe](api.html#ipyvolume.pylab.plot_wireframe) has a similar api, as does [plot_mesh](api.html#ipyvolume.pylab.plot_mesh) which can do both the surface and wireframe at the same time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "68da1679ceb94690b13f08d173220426",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# f(u, v) -> (u, v, u*v**2)\n",
    "a = np.arange(-5, 5)\n",
    "U, V = np.meshgrid(a, a)\n",
    "X = U\n",
    "Y = V\n",
    "Z = X*Y**2\n",
    "p3.figure()\n",
    "p3.plot_surface(X, Z, Y, color=\"orange\")\n",
    "p3.plot_wireframe(X, Z, Y, color=\"black\")\n",
    "p3.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Colors\n",
    "Vertices can take colors as well, as the example below (adapted from [matplotlib](https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#surface-plots)) shows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X = np.arange(-5, 5, 0.25*1)\n",
    "Y = np.arange(-5, 5, 0.25*1)\n",
    "X, Y = np.meshgrid(X, Y)\n",
    "R = np.sqrt(X**2 + Y**2)\n",
    "Z = np.sin(R)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from matplotlib import cm\n",
    "colormap = cm.coolwarm\n",
    "znorm = Z - Z.min()\n",
    "znorm /= znorm.ptp()\n",
    "znorm.min(), znorm.max()\n",
    "color = colormap(znorm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fdf0a013f1774dfca4531932d967beb7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "p3.figure()\n",
    "mesh = p3.plot_surface(X, Z, Y, color=color[...,0:3])\n",
    "p3.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Texture mapping\n",
    "Texture mapping can be done by providing a [PIL](https://pillow.readthedocs.io) image, and UV coordiante (texture coordinates, between 0 and 1). Note that like almost anything in ipyvolume, these u & v coordinates can be animated, as well as the textures."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import PIL.Image\n",
    "image = PIL.Image.open('data/jupyter.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c2056b9fe3d34f3fba39745d03b07133",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = p3.figure()\n",
    "p3.style.use('dark')\n",
    "# we create a sequence of 8 u v coordinates so that the texture moves across the surface.\n",
    "u = np.array([X/5 +np.sin(k/8*np.pi)*4. for k in range(8)])\n",
    "v = np.array([-Y/5*(1-k/7.) + Z*(k/7.) for k in range(8)])\n",
    "mesh = p3.plot_mesh(X, Z, Y, u=u, v=v, texture=image, wireframe=False)\n",
    "p3.animation_control(mesh, interval=800, sequence_length=8)\n",
    "p3.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now make a small movie / animated gif of 30 frames."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6e880ca551f1432ab880c96105795dfe",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "frames = 30\n",
    "p3.movie('movie.gif', frames=frames)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And play that movie on a square"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "62cd27983bd049e6b1319625183dcb57",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "A Jupyter Widget"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "p3.figure()\n",
    "x = np.array([-1.,  1,  1,  -1])\n",
    "y = np.array([-1,  -1, 1., 1])\n",
    "z = np.array([0., 0, 0., 0])\n",
    "u = x / 2 + 0.5\n",
    "v = y / 2 + 0.5\n",
    "# square\n",
    "triangles = [(0, 1, 2), (0, 2, 3)]\n",
    "m = p3.plot_trisurf(x, y, z, triangles=triangles, u=u, v=v, texture=PIL.Image.open('movie.gif'))\n",
    "p3.animation_control(m, sequence_length=frames)\n",
    "p3.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [default]",
   "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.5.2"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "044975e609964ee3bd08c4eae1ade6dc": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "06d4ad618eda4880b021e7cd5f7357fd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "FloatSliderModel",
      "state": {
       "layout": "IPY_MODEL_fdc0961ac8fc42acb9862bb6942805de",
       "max": 7,
       "style": "IPY_MODEL_b87157ba24ab4ffe82900e8ba1058fae"
      }
     },
     "07986ef45f6c485d842e75d621557566": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "PlayModel",
      "state": {
       "_repeat": true,
       "interval": 200,
       "layout": "IPY_MODEL_de643c5a16d64744bf8d5dcc1116def1",
       "max": 29,
       "style": "IPY_MODEL_934ad526459b4e79bea1f80de0a55ae6",
       "value": 12
      }
     },
     "0eb9cca27f8448af93024585459d07c7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "1151ef8f2eea40e4a2afd7dac124d96b": {
      "buffers": [
       {
        "data": "g////5z///+1////zv///+f///8AAAAAGQAAADIAAABLAAAAZAAAALD////A////0P///+D////w////AAAAABAAAAAgAAAAMAAAAEAAAADT////3P///+X////u////9////wAAAAAJAAAAEgAAABsAAAAkAAAA7P////D////0////+P////z///8AAAAABAAAAAgAAAAMAAAAEAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAOz////w////9P////j////8////AAAAAAQAAAAIAAAADAAAABAAAADT////3P///+X////u////9////wAAAAAJAAAAEgAAABsAAAAkAAAAsP///8D////Q////4P////D///8AAAAAEAAAACAAAAAwAAAAQAAAAA==",
        "encoding": "base64",
        "path": [
         "y",
         0,
         "buffer"
        ]
       },
       {
        "data": "+/////v////7////+/////v////7////+/////v////7////+/////z////8/////P////z////8/////P////z////8/////P////z////9/////f////3////9/////f////3////9/////f////3////9/////v////7////+/////v////7////+/////v////7////+/////v////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA==",
        "encoding": "base64",
        "path": [
         "z",
         0,
         "buffer"
        ]
       },
       {
        "data": "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",
        "encoding": "base64",
        "path": [
         "triangles",
         0,
         "buffer"
        ]
       },
       {
        "data": "+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAD7/////P////3////+/////////wAAAAABAAAAAgAAAAMAAAAEAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAD7/////P////3////+/////////wAAAAABAAAAAgAAAAMAAAAEAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAD7/////P////3////+/////////wAAAAABAAAAAgAAAAMAAAAEAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAA==",
        "encoding": "base64",
        "path": [
         "x",
         0,
         "buffer"
        ]
       }
      ],
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "MeshModel",
      "state": {
       "_dom_classes": [],
       "color": "orange",
       "layout": "IPY_MODEL_044975e609964ee3bd08c4eae1ade6dc",
       "lines": null,
       "texture": null,
       "triangles": [
        {
         "dtype": "uint32",
         "shape": [
          162,
          3
         ]
        }
       ],
       "u": null,
       "v": null,
       "x": [
        {
         "dtype": "int32",
         "shape": [
          100
         ]
        }
       ],
       "y": [
        {
         "dtype": "int32",
         "shape": [
          100
         ]
        }
       ],
       "z": [
        {
         "dtype": "int32",
         "shape": [
          100
         ]
        }
       ]
      }
     },
     "126ebc47c1dc4071a949ce4e8637fd26": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "192d45c1ee094e3da744e681d9212dff": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "197deb07981449068da49f19241b1bf6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "21a090e8cede4fd889f7ce07e2c7f8c6": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "253c958502a24affaaa88216215ac10c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "2d872bd9b0c34fb1980a015ce2541fca": {
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "FigureModel",
      "state": {
       "anglex": -0.0997529632232481,
       "angley": 0.2803173097973837,
       "anglez": 0.07660075522652841,
       "data_max": 0,
       "data_min": 0,
       "height": 500,
       "layout": "IPY_MODEL_21a090e8cede4fd889f7ce07e2c7f8c6",
       "matrix_projection": [
        3.017766952966369,
        0,
        0,
        0,
        0,
        2.414213562373095,
        0,
        0,
        0,
        0,
        -1.000002000002,
        -1,
        0,
        0,
        -0.02000002000002,
        0
       ],
       "matrix_world": [
        0.23953743861707757,
        -0.01838472130465138,
        0.06916514673822426,
        0,
        0.012168566700428872,
        0.2485548523931428,
        0.023925119357700666,
        0,
        -0.07052475795936493,
        -0.019557284432489778,
        0.23904763362225465,
        0,
        -2.3592239273284576e-16,
        -2.7755575615628914e-17,
        -1.9999999999999982,
        1
       ],
       "meshes": [
        "IPY_MODEL_a9cbf780379747ef99f6c3f80a254437"
       ],
       "scatters": [
        "IPY_MODEL_ba51bd7df0f24373b2a73991e0656361"
       ],
       "tf": null,
       "volume_data": null,
       "width": 400,
       "xlim": [
        -2,
        2
       ],
       "ylim": [
        -2,
        2
       ],
       "zlim": [
        -2,
        2
       ]
      }
     },
     "30c1c240c5984daf9c0882a4359c9ebd": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "FloatSliderModel",
      "state": {
       "layout": "IPY_MODEL_a2a9e96ce6d947da99a90e0431b168c2",
       "max": 29,
       "style": "IPY_MODEL_738e53d2b79e4c5ca022047a361b3911",
       "value": 12
      }
     },
     "386d86513ce94578a96fe6f1c5d19531": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "3d32c173907649c4963c69417f8b216f": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "LinkModel",
      "state": {
       "source": [
        "IPY_MODEL_06d4ad618eda4880b021e7cd5f7357fd",
        "value"
       ],
       "target": [
        "IPY_MODEL_42b42cacc849495f8441234568081d17",
        "sequence_index"
       ]
      }
     },
     "42b42cacc849495f8441234568081d17": {
      "buffers": [
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "y",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         1,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         2,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         3,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         4,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         5,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         6,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "v",
         7,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "z",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 48672 characters]",
        "encoding": "base64",
        "path": [
         "triangles",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "x",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         1,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         2,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         3,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         4,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         5,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         6,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "u",
         7,
         "buffer"
        ]
       }
      ],
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "MeshModel",
      "state": {
       "_dom_classes": [],
       "layout": "IPY_MODEL_770dcb473ef24448990e3d0d64e57894",
       "lines": null,
       "texture": [
        "data:image/png;base64,[encoded data, 6084 characters]"
       ],
       "triangles": [
        {
         "dtype": "uint32",
         "shape": [
          3042,
          3
         ]
        }
       ],
       "u": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ],
       "v": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        },
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ],
       "x": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ],
       "y": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ],
       "z": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ]
      }
     },
     "432588f1d0d04f68859ea7ecd7aaec0f": {
      "buffers": [
       {
        "data": "g////5z///+1////zv///+f///8AAAAAGQAAADIAAABLAAAAZAAAALD////A////0P///+D////w////AAAAABAAAAAgAAAAMAAAAEAAAADT////3P///+X////u////9////wAAAAAJAAAAEgAAABsAAAAkAAAA7P////D////0////+P////z///8AAAAABAAAAAgAAAAMAAAAEAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAOz////w////9P////j////8////AAAAAAQAAAAIAAAADAAAABAAAADT////3P///+X////u////9////wAAAAAJAAAAEgAAABsAAAAkAAAAsP///8D////Q////4P////D///8AAAAAEAAAACAAAAAwAAAAQAAAAA==",
        "encoding": "base64",
        "path": [
         "y",
         0,
         "buffer"
        ]
       },
       {
        "data": "+/////v////7////+/////v////7////+/////v////7////+/////z////8/////P////z////8/////P////z////8/////P////z////9/////f////3////9/////f////3////9/////f////3////9/////v////7////+/////v////7////+/////v////7////+/////v////////////////////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAA==",
        "encoding": "base64",
        "path": [
         "z",
         0,
         "buffer"
        ]
       },
       {
        "data": "+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAD7/////P////3////+/////////wAAAAABAAAAAgAAAAMAAAAEAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAD7/////P////3////+/////////wAAAAABAAAAAgAAAAMAAAAEAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAPv////8/////f////7/////////AAAAAAEAAAACAAAAAwAAAAQAAAD7/////P////3////+/////////wAAAAABAAAAAgAAAAMAAAAEAAAA+/////z////9/////v////////8AAAAAAQAAAAIAAAADAAAABAAAAA==",
        "encoding": "base64",
        "path": [
         "x",
         0,
         "buffer"
        ]
       },
       {
        "data": "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PgAAAD8AAAA/AAAASQAAAEgAAABJAAAAPwAAAEkAAAA/AAAAQAAAAEAAAABKAAAASQAAAEoAAABAAAAASgAAAEAAAABBAAAAQQAAAEsAAABKAAAASwAAAEEAAABLAAAAQQAAAEIAAABCAAAATAAAAEsAAABMAAAAQgAAAEwAAABCAAAAQwAAAEMAAABNAAAATAAAAE0AAABDAAAATQAAAEMAAABEAAAARAAAAE4AAABNAAAATgAAAEQAAABOAAAARAAAAEUAAABFAAAATwAAAE4AAABPAAAARgAAAFAAAABGAAAARwAAAEcAAABRAAAAUAAAAFEAAABHAAAAUQAAAEcAAABIAAAASAAAAFIAAABRAAAAUgAAAEgAAABSAAAASAAAAEkAAABJAAAAUwAAAFIAAABTAAAASQAAAFMAAABJAAAASgAAAEoAAABUAAAAUwAAAFQAAABKAAAAVAAAAEoAAABLAAAASwAAAFUAAABUAAAAVQAAAEsAAABVAAAASwAAAEwAAABMAAAAVgAAAFUAAABWAAAATAAAAFYAAABMAAAATQAAAE0AAABXAAAAVgAAAFcAAABNAAAAVwAAAE0AAABOAAAATgAAAFgAAABXAAAAWAAAAE4AAABYAAAATgAAAE8AAABPAAAAWQAAAFgAAABZAAAAUAAAAFoAAABQAAAAUQAAAFEAAABbAAAAWgAAAFsAAABRAAAAWwAAAFEAAABSAAAAUgAAAFwAAABbAAAAXAAAAFIAAABcAAAAUgAAAFMAAABTAAAAXQAAAFwAAABdAAAAUwAAAF0AAABTAAAAVAAAAFQAAABeAAAAXQAAAF4AAABUAAAAXgAAAFQAAABVAAAAVQAAAF8AAABeAAAAXwAAAFUAAABfAAAAVQAAAFYAAABWAAAAYAAAAF8AAABgAAAAVgAAAGAAAABWAAAAVwAAAFcAAABhAAAAYAAAAGEAAABXAAAAYQAAAFcAAABYAAAAWAAAAGIAAABhAAAAYgAAAFgAAABiAAAAWAAAAFkAAABZAAAAYwAAAGIAAABjAAAA",
        "encoding": "base64",
        "path": [
         "lines",
         0,
         "buffer"
        ]
       }
      ],
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "MeshModel",
      "state": {
       "_dom_classes": [],
       "color": "black",
       "layout": "IPY_MODEL_50a48598c6e94f4b98650f19d0f8afc7",
       "lines": [
        {
         "dtype": "uint32",
         "shape": [
          324,
          2
         ]
        }
       ],
       "texture": null,
       "triangles": null,
       "u": null,
       "v": null,
       "x": [
        {
         "dtype": "int32",
         "shape": [
          100
         ]
        }
       ],
       "y": [
        {
         "dtype": "int32",
         "shape": [
          100
         ]
        }
       ],
       "z": [
        {
         "dtype": "int32",
         "shape": [
          100
         ]
        }
       ]
      }
     },
     "4336a5ab0b0744e28bd159ee0df43caf": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "50a48598c6e94f4b98650f19d0f8afc7": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "62cd27983bd049e6b1319625183dcb57": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "VBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_eb752e1568cd435dac164f62269a58e6",
        "IPY_MODEL_cf153d5072084db38c4404895e44cb82"
       ],
       "layout": "IPY_MODEL_197deb07981449068da49f19241b1bf6"
      }
     },
     "660792dfcd3c4591afae9435b0f7d368": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "68819084a551454a9202b8ef30258d8b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "LinkModel",
      "state": {
       "source": [
        "IPY_MODEL_aa9b46fa340647e5ae4223d737ec87c3",
        "value"
       ],
       "target": [
        "IPY_MODEL_06d4ad618eda4880b021e7cd5f7357fd",
        "value"
       ]
      }
     },
     "68da1679ceb94690b13f08d173220426": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "VBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_9c96c9db0e1c4a70ab55fe59771d5024"
       ],
       "layout": "IPY_MODEL_c3bdfb58d3134b57818da04643db2fc1"
      }
     },
     "6e880ca551f1432ab880c96105795dfe": {
      "model_module": "@jupyter-widgets/output",
      "model_module_version": "1.0.0",
      "model_name": "OutputModel",
      "state": {
       "layout": "IPY_MODEL_126ebc47c1dc4071a949ce4e8637fd26",
       "outputs": [
        {
         "name": "stdout",
         "output_type": "stream",
         "text": "convert -delay 3.3333333333333335 -loop 0 /var/folders/vn/_rmzj8jd0215_g9yfrn8pmgm0000gn/T/tmpfy8ifdit/frame-*.png movie.gif\n"
        }
       ]
      }
     },
     "738e53d2b79e4c5ca022047a361b3911": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "74898a016b7546daae284df45030a27e": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "770dcb473ef24448990e3d0d64e57894": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "82e97cf91b08463d87b2a0c7fb18173e": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "LinkModel",
      "state": {
       "source": [
        "IPY_MODEL_07986ef45f6c485d842e75d621557566",
        "value"
       ],
       "target": [
        "IPY_MODEL_30c1c240c5984daf9c0882a4359c9ebd",
        "value"
       ]
      }
     },
     "833b6ce0f8df4cee83d9cfde537cd1de": {
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "FigureModel",
      "state": {
       "anglex": -0.7132088953052131,
       "angley": -0.3211612433961814,
       "anglez": 0.20221558013229385,
       "data_max": 0,
       "data_min": 0,
       "height": 500,
       "layout": "IPY_MODEL_da76b9c5c4ff4ae2836499e60ffd6410",
       "matrix_projection": [
        3.017766952966369,
        0,
        0,
        0,
        0,
        2.414213562373095,
        0,
        0,
        0,
        0,
        -1.000002000002,
        -1,
        0,
        0,
        -0.02000002000002,
        0
       ],
       "matrix_world": [
        0.09533695689638826,
        -0.019545763344946565,
        -0.032376270936896046,
        0,
        0.17710646497780194,
        0.3496903366872706,
        0.31040717667405987,
        0,
        0.0105089921064173,
        -0.07065427101527048,
        0.07359979760154044,
        0,
        0.013229806087790211,
        -0.01127685542917511,
        -2.9241605700260007,
        1
       ],
       "meshes": [
        "IPY_MODEL_ac25a1b3ab58475bb84579b5cb25e181"
       ],
       "scatters": [],
       "tf": null,
       "volume_data": null,
       "width": 400,
       "xlim": [
        -5,
        4.75
       ],
       "ylim": [
        -0.9999894127234641,
        1
       ],
       "zlim": [
        -5,
        4.75
       ]
      }
     },
     "934ad526459b4e79bea1f80de0a55ae6": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "979f094add974d19bc189d9cb6b96399": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "9c96c9db0e1c4a70ab55fe59771d5024": {
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "FigureModel",
      "state": {
       "anglex": -0.8267094785286719,
       "angley": -0.6195021008684838,
       "anglez": -0.17992169948477016,
       "data_max": 0,
       "data_min": 0,
       "height": 500,
       "layout": "IPY_MODEL_f26b16bb41124fb29e7e6b2787681364",
       "matrix_projection": [
        3.017766952966369,
        0,
        0,
        0,
        0,
        2.414213562373095,
        0,
        0,
        0,
        0,
        -1.000002000002,
        -1,
        0,
        0,
        -0.02000002000002,
        0
       ],
       "matrix_world": [
        0.08900279117629371,
        0.01618859636908737,
        -0.06451442879521993,
        0,
        0.0013292138241193133,
        0.0033013815230609,
        0.0026621714949858666,
        0,
        0.05761880167342125,
        -0.07260618695703214,
        0.061270664445761666,
        0,
        0.08992596922634896,
        0.013058473744288993,
        -3.0266312048314585,
        0.9999999999999998
       ],
       "meshes": [
        "IPY_MODEL_1151ef8f2eea40e4a2afd7dac124d96b",
        "IPY_MODEL_432588f1d0d04f68859ea7ecd7aaec0f"
       ],
       "scatters": [],
       "tf": null,
       "volume_data": null,
       "width": 400,
       "xlim": [
        -5,
        4
       ],
       "ylim": [
        -125,
        100
       ],
       "zlim": [
        -5,
        4
       ]
      }
     },
     "a2a9e96ce6d947da99a90e0431b168c2": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "a9cbf780379747ef99f6c3f80a254437": {
      "buffers": [
       {
        "data": "AAAAAAAAAAAAAIA/AACAvw==",
        "encoding": "base64",
        "path": [
         "y",
         0,
         "buffer"
        ]
       },
       {
        "data": "8wQ1v/MENb/zBDU/8wQ1Pw==",
        "encoding": "base64",
        "path": [
         "z",
         0,
         "buffer"
        ]
       },
       {
        "data": "AAAAAAEAAAACAAAAAAAAAAEAAAADAAAAAAAAAAIAAAADAAAAAQAAAAMAAAACAAAA",
        "encoding": "base64",
        "path": [
         "triangles",
         0,
         "buffer"
        ]
       },
       {
        "data": "AACAPwAAgL8AAAAAAAAAAA==",
        "encoding": "base64",
        "path": [
         "x",
         0,
         "buffer"
        ]
       }
      ],
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "MeshModel",
      "state": {
       "_dom_classes": [],
       "color": "orange",
       "layout": "IPY_MODEL_eaeb6a61bd4c4917bf251bc6629671af",
       "lines": null,
       "texture": null,
       "triangles": [
        {
         "dtype": "uint32",
         "shape": [
          4,
          3
         ]
        }
       ],
       "u": null,
       "v": null,
       "x": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "y": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "z": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ]
      }
     },
     "aa9b46fa340647e5ae4223d737ec87c3": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "PlayModel",
      "state": {
       "_repeat": true,
       "interval": 800,
       "layout": "IPY_MODEL_192d45c1ee094e3da744e681d9212dff",
       "max": 7,
       "style": "IPY_MODEL_c9865042c94e4ca29323227911fe868b"
      }
     },
     "ac25a1b3ab58475bb84579b5cb25e181": {
      "buffers": [
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "y",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "z",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 48672 characters]",
        "encoding": "base64",
        "path": [
         "triangles",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 8536 characters]",
        "encoding": "base64",
        "path": [
         "x",
         0,
         "buffer"
        ]
       },
       {
        "data": "[encoded data, 25600 characters]",
        "encoding": "base64",
        "path": [
         "color",
         0,
         "buffer"
        ]
       }
      ],
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "MeshModel",
      "state": {
       "_dom_classes": [],
       "color": [
        {
         "dtype": "float32",
         "shape": [
          1600,
          3
         ]
        }
       ],
       "layout": "IPY_MODEL_e4241a5cce54462f9b3671763f9ce27d",
       "lines": null,
       "texture": null,
       "triangles": [
        {
         "dtype": "uint32",
         "shape": [
          3042,
          3
         ]
        }
       ],
       "u": null,
       "v": null,
       "x": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ],
       "y": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ],
       "z": [
        {
         "dtype": "float32",
         "shape": [
          1600
         ]
        }
       ]
      }
     },
     "b821c0b3f6f447a68564879c98eca82e": {
      "buffers": [
       {
        "data": "AACAvwAAgL8AAIA/AACAPw==",
        "encoding": "base64",
        "path": [
         "y",
         0,
         "buffer"
        ]
       },
       {
        "data": "AAAAAAAAAAAAAIA/AACAPw==",
        "encoding": "base64",
        "path": [
         "v",
         0,
         "buffer"
        ]
       },
       {
        "data": "AAAAAAAAAAAAAAAAAAAAAA==",
        "encoding": "base64",
        "path": [
         "z",
         0,
         "buffer"
        ]
       },
       {
        "data": "AAAAAAEAAAACAAAAAAAAAAIAAAADAAAA",
        "encoding": "base64",
        "path": [
         "triangles",
         0,
         "buffer"
        ]
       },
       {
        "data": "AACAvwAAgD8AAIA/AACAvw==",
        "encoding": "base64",
        "path": [
         "x",
         0,
         "buffer"
        ]
       },
       {
        "data": "AAAAAAAAgD8AAIA/AAAAAA==",
        "encoding": "base64",
        "path": [
         "u",
         0,
         "buffer"
        ]
       }
      ],
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "MeshModel",
      "state": {
       "_dom_classes": [],
       "layout": "IPY_MODEL_660792dfcd3c4591afae9435b0f7d368",
       "lines": null,
       "sequence_index": 12,
       "texture": [
        "data:image/png;base64,[encoded data, 73456 characters]",
        "data:image/png;base64,[encoded data, 72624 characters]",
        "data:image/png;base64,[encoded data, 71604 characters]",
        "data:image/png;base64,[encoded data, 71056 characters]",
        "data:image/png;base64,[encoded data, 69624 characters]",
        "data:image/png;base64,[encoded data, 66688 characters]",
        "data:image/png;base64,[encoded data, 66724 characters]",
        "data:image/png;base64,[encoded data, 69272 characters]",
        "data:image/png;base64,[encoded data, 68848 characters]",
        "data:image/png;base64,[encoded data, 61744 characters]",
        "data:image/png;base64,[encoded data, 63844 characters]",
        "data:image/png;base64,[encoded data, 59776 characters]",
        "data:image/png;base64,[encoded data, 61672 characters]",
        "data:image/png;base64,[encoded data, 69564 characters]",
        "data:image/png;base64,[encoded data, 79884 characters]",
        "data:image/png;base64,[encoded data, 83876 characters]",
        "data:image/png;base64,[encoded data, 84344 characters]",
        "data:image/png;base64,[encoded data, 74020 characters]",
        "data:image/png;base64,[encoded data, 61704 characters]",
        "data:image/png;base64,[encoded data, 61760 characters]",
        "data:image/png;base64,[encoded data, 64316 characters]",
        "data:image/png;base64,[encoded data, 67004 characters]",
        "data:image/png;base64,[encoded data, 72948 characters]",
        "data:image/png;base64,[encoded data, 72056 characters]",
        "data:image/png;base64,[encoded data, 62664 characters]",
        "data:image/png;base64,[encoded data, 63232 characters]",
        "data:image/png;base64,[encoded data, 68704 characters]",
        "data:image/png;base64,[encoded data, 69604 characters]",
        "data:image/png;base64,[encoded data, 74688 characters]",
        "data:image/png;base64,[encoded data, 76308 characters]"
       ],
       "triangles": [
        {
         "dtype": "uint32",
         "shape": [
          2,
          3
         ]
        }
       ],
       "u": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "v": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "x": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "y": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "z": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ]
      }
     },
     "b87157ba24ab4ffe82900e8ba1058fae": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "SliderStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "ba51bd7df0f24373b2a73991e0656361": {
      "buffers": [
       {
        "data": "AAAAAAAAAAAAAIA/AACAvw==",
        "encoding": "base64",
        "path": [
         "y",
         0,
         "buffer"
        ]
       },
       {
        "data": "8wQ1v/MENb/zBDU/8wQ1Pw==",
        "encoding": "base64",
        "path": [
         "z",
         0,
         "buffer"
        ]
       },
       {
        "data": "AACAPwAAgL8AAAAAAAAAAA==",
        "encoding": "base64",
        "path": [
         "x",
         0,
         "buffer"
        ]
       }
      ],
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "ScatterModel",
      "state": {
       "_dom_classes": [],
       "color": "blue",
       "geo": "sphere",
       "layout": "IPY_MODEL_253c958502a24affaaa88216215ac10c",
       "selected": null,
       "size": 2,
       "size_selected": 2.6,
       "visible": true,
       "visible_lines": false,
       "visible_markers": true,
       "vx": null,
       "vy": null,
       "vz": null,
       "x": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "y": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ],
       "z": [
        {
         "dtype": "float32",
         "shape": [
          4
         ]
        }
       ]
      }
     },
     "c2056b9fe3d34f3fba39745d03b07133": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "VBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_f0d5bcde565543539e3ffe005d40adde",
        "IPY_MODEL_da8e8977c1064d3499282c12e87f8866"
       ],
       "layout": "IPY_MODEL_74898a016b7546daae284df45030a27e"
      }
     },
     "c3bdfb58d3134b57818da04643db2fc1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "c9865042c94e4ca29323227911fe868b": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "DescriptionStyleModel",
      "state": {
       "description_width": ""
      }
     },
     "cf153d5072084db38c4404895e44cb82": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_07986ef45f6c485d842e75d621557566",
        "IPY_MODEL_30c1c240c5984daf9c0882a4359c9ebd"
       ],
       "layout": "IPY_MODEL_4336a5ab0b0744e28bd159ee0df43caf"
      }
     },
     "d8b541128a014a6bbc675788578bba0d": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "VBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_2d872bd9b0c34fb1980a015ce2541fca"
       ],
       "layout": "IPY_MODEL_f81e93766f26439b8fab5bb60d33a512"
      }
     },
     "da76b9c5c4ff4ae2836499e60ffd6410": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "da8e8977c1064d3499282c12e87f8866": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "HBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_aa9b46fa340647e5ae4223d737ec87c3",
        "IPY_MODEL_06d4ad618eda4880b021e7cd5f7357fd"
       ],
       "layout": "IPY_MODEL_0eb9cca27f8448af93024585459d07c7"
      }
     },
     "de643c5a16d64744bf8d5dcc1116def1": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "e015185911e744e4a0b2e573887025a4": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "LinkModel",
      "state": {
       "source": [
        "IPY_MODEL_30c1c240c5984daf9c0882a4359c9ebd",
        "value"
       ],
       "target": [
        "IPY_MODEL_b821c0b3f6f447a68564879c98eca82e",
        "sequence_index"
       ]
      }
     },
     "e4241a5cce54462f9b3671763f9ce27d": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "eaeb6a61bd4c4917bf251bc6629671af": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "eb752e1568cd435dac164f62269a58e6": {
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "FigureModel",
      "state": {
       "anglex": -0.2119189382486498,
       "angley": 0.4298878658400835,
       "anglez": 0.03935785723892849,
       "animation": 200,
       "animation_exponent": 1,
       "data_max": 0,
       "data_min": 0,
       "height": 500,
       "layout": "IPY_MODEL_386d86513ce94578a96fe6f1c5d19531",
       "matrix_projection": [
        3.017766952966369,
        0,
        0,
        0,
        0,
        2.414213562373095,
        0,
        0,
        0,
        0,
        -1.000002000002,
        -1,
        0,
        0,
        -0.02000002000002,
        0
       ],
       "matrix_world": [
        0.4541542657608035,
        -0.017883773942603844,
        0.20838443684890517,
        0,
        -0.024563140481515686,
        0.4901606397385712,
        0.09559915993752187,
        0,
        -0.415406090571387,
        -0.19414136994102424,
        0.8886770551744987,
        0,
        0.20770304528569355,
        0.09707068497051229,
        -2.444338527587249,
        1
       ],
       "meshes": [
        "IPY_MODEL_b821c0b3f6f447a68564879c98eca82e"
       ],
       "scatters": [],
       "tf": null,
       "volume_data": null,
       "width": 400,
       "xlim": [
        -1,
        1
       ],
       "ylim": [
        -1,
        1
       ]
      }
     },
     "f0d5bcde565543539e3ffe005d40adde": {
      "model_module": "ipyvolume",
      "model_module_version": "~0.4.0-beta.1",
      "model_name": "FigureModel",
      "state": {
       "anglex": -0.7182801524543477,
       "angley": 6.073745796940266,
       "anglez": 0.019417507455253318,
       "animation": 800,
       "animation_exponent": 1,
       "data_max": 0,
       "data_min": 0,
       "height": 500,
       "layout": "IPY_MODEL_979f094add974d19bc189d9cb6b96399",
       "matrix_projection": [
        3.017766952966369,
        0,
        0,
        0,
        0,
        2.414213562373095,
        0,
        0,
        0,
        0,
        -1.000002000002,
        -1,
        0,
        0,
        -0.02000002000002,
        0
       ],
       "matrix_world": [
        0.09367930683576284,
        -0.0018192472873876982,
        -0.041716578777005145,
        0,
        0.1411199563002855,
        0.37380176301772516,
        0.30059947893966305,
        0,
        0.03009357250919206,
        -0.06809362472760921,
        0.0705480708444198,
        0,
        0.015470862880118182,
        -0.008741087773191275,
        -1.9963976547564748,
        0.9999999999999998
       ],
       "meshes": [
        "IPY_MODEL_42b42cacc849495f8441234568081d17"
       ],
       "scatters": [],
       "style": {
        "axes": {
         "color": "white",
         "label": {
          "color": "white"
         },
         "ticklabel": {
          "color": "white"
         },
         "visible": true
        },
        "background-color": "black",
        "box": {
         "visible": true
        }
       },
       "tf": null,
       "volume_data": null,
       "width": 400,
       "xlim": [
        -5,
        4.75
       ],
       "ylim": [
        -0.9999894127234641,
        1
       ],
       "zlim": [
        -5,
        4.75
       ]
      }
     },
     "f26b16bb41124fb29e7e6b2787681364": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "f7f080101a294d6896eec7646d53575c": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "f81e93766f26439b8fab5bb60d33a512": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fdc0961ac8fc42acb9862bb6942805de": {
      "model_module": "@jupyter-widgets/base",
      "model_module_version": "1.0.0",
      "model_name": "LayoutModel",
      "state": {}
     },
     "fdf0a013f1774dfca4531932d967beb7": {
      "model_module": "@jupyter-widgets/controls",
      "model_module_version": "1.0.0",
      "model_name": "VBoxModel",
      "state": {
       "children": [
        "IPY_MODEL_833b6ce0f8df4cee83d9cfde537cd1de"
       ],
       "layout": "IPY_MODEL_f7f080101a294d6896eec7646d53575c"
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
