{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Hamiltonian Monte Carlo (HMC)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import seaborn as sns\n", "from functools import partial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use of auxiliary variables \n", "\n", "Slice sampling is a simple MCMC algorithm that introduces the idea of auxiliary variables. The motivation for slice sampling is that if we can sample uniformly from the region under the graph of the target distribution, we will have random samples from the target distribution. In the univariate case, the algorithm is as follows\n", "\n", "- start with some $x$ where $p(x) \\ne 0$\n", "- repeat\n", " - sample $y$ (auxiliary variable) uniformly from 0 to $f(x)$\n", " - draw a horizontal line at $y$ within $p(x)$ (this may consist of multiple intervals)\n", " - sample $x$ from the horizontal segments\n", "\n", "The auxiliary $y$ variable allows us to sample $(x, y)$ points that are in the region under the graph of the target distribution. Only the $x$ variable is used for the Monte Carlo samples - the $y$ variables are simply discarded. This works because the joint distribution is constructed so that it factors $p(x, y) = p(y \\mid x) p(x)$ and so projecting leaves just $p(x)$. The slice sampler is a Markov Chain Monte Carlo method since the next $(x, y)$ position depends only on the current position. Like Gibbs sampling, there is no tuning process and all proposals are accepted. For slice sampling, you either need the inverse distribution function or some way to estimate it. Later we will see that Hamiltonian Monte Carlo also uses auxiliary variables to generate a new proposal in an analogous way.\n", "\n", "A toy example illustrates the process - Suppose we want to draw random samples from the posterior distribution $\\mathcal{N}(0, 1)$ using slice sampling\n", "\n", "Start with some value $x$\n", "- sample $y$ from $\\mathcal{U}(0, f(x))$ - this is the horizontal \"slice\" that gives the method its name\n", "- sample the next $x$ from $f^{-1}(y)$ - this is typically done numerically\n", "- repeat\n", "\n", "![img](figs/slice.jpg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A simple slice sampler example" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import scipy.stats as stats" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "dist = stats.norm(5, 3)\n", "w = 0.5\n", "x = dist.rvs()\n", "\n", "niters = 1000\n", "xs = []\n", "while len(xs) < niters:\n", " y = np.random.uniform(0, dist.pdf(x))\n", " lb = x\n", " rb = x\n", " while y < dist.pdf(lb):\n", " lb -= w\n", " while y < dist.pdf(rb):\n", " rb += w\n", " x = np.random.uniform(lb, rb)\n", " if y > dist.pdf(x):\n", " if np.abs(x-lb) < np.abs(x-rb):\n", " lb = x\n", " else:\n", " lb = y\n", " else:\n", " xs.append(x)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(xs, 20)\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notes on the slice sampler:\n", "\n", "- the slice may consist of disjoint pieces for multimodal distributions\n", "- the slice can be a rectangular hyperslab for multivariable posterior distributions\n", "- sampling from the slice (i.e. finding the boundaries at level $y$) is non-trivial and may involve iterative rejection steps - see figure below (from Wikimedia) for a typical approach - the blue bars represent disjoint pieces of the true slice through a bimodal distribution and the black lines are the proposal distribution approximating the true slice\n", "\n", "![Slice sampling algorithm from Wikipedia](http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Summary_of_slice_sampling.png/750px-Summary_of_slice_sampling.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hamiltonian Monte Carlo (HMC)\n", "\n", "HMC uses an auxiliary variable corresponding to the momentum of particles in a potential energy well to generate proposal distributions that can make use of gradient information in the posterior distribution. For reversibility to be maintained, the total energy of the particle has to be conserved - hence we are interested in Hamiltonian systems. The main attraction of HMC is that it works much better than other methods when variables of interest are highly correlated. Because we have to solve problems involving momentum, we need to understand how to numerically solve differential equations in a way that is both accurate (i.e. second order) and preserves total energy (necessary for a Hamiltonian system).\n", "\n", "Example adapted from [MCMC: Hamiltonian Monte Carlo (a.k.a. Hybrid Monte Carlo)](https://theclevermachine.wordpress.com/2012/11/18/mcmc-hamiltonian-monte-carlo-a-k-a-hybrid-monte-carlo/)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Hamiltonian systems\n", "\n", "In a Hamiltonian system, we consider particles with position $x$ and momentum (or velocity if we assume unit mass) $v$. The total energy of the system $H(x, v) = K(v) + U(x)$, where $K$ is the kinetic energy and $U$ is the potential energy, is conserved. Such a system satisfies the following Hamiltonian equations\n", "\n", "$$\n", "\\begin{align}\n", "\\frac{dx}{dt} &= & \\frac{\\delta H}{dv} \\\\\n", "\\frac{dv}{dt} &= & -\\frac{\\delta H}{dx} \n", "\\end{align}\n", "$$\n", "\n", "Since $K$ depends only on $v$ and $U$ depends only on $x$, we have\n", "$$\n", "\\begin{align}\n", "\\frac{dx}{dt} &= & \\frac{\\delta K}{dv} \\\\\n", "\\frac{dv}{dt} &= & -\\frac{\\delta U}{dx}\n", "\\end{align}\n", "$$\n", "\n", "#### Harmonic oscillator\n", "\n", "We will consider solving a classical Hamiltonian system - that of a undamped spring governed by the second order differential equation\n", "\n", "$$\n", "x'' + x = 0\n", "$$\n", "\n", "We convert this to two first order ODEs by using a dummy variable $x' = v$ to get\n", "\n", "$$\n", "\\begin{align}\n", "x' &= v \\\\\n", "v' &= -x\n", "\\end{align}\n", "$$\n", "\n", "From the Hamiltonian equations above, this is equivalent to a system with kinetic energy $K(v) = \\frac{1}{2}v^2$ and potential energy $U(x) = \\frac{1}{2}x^2$.\n", "\n", "Writing in matrix form,\n", "\n", "$$\n", "A = \\pmatrix{ x' \\\\ v' } = \\pmatrix{0 & 1 \\\\ -1 & 0} \\pmatrix{x \\\\ v}\n", "$$\n", "\n", "and in general, for the state vector $x$,\n", "\n", "$$\n", "x' = Ax\n", "$$\n", "\n", "We note that $A$ is anti- or skew-symmetric ($A^T = -A$), and hence has purely imaginary eigenvalues. Solving $|A - \\lambda I = 0$, we see that the eigenvalues and eigenvectors are $i, \\pmatrix{1\\\\i}$ and $-i, \\pmatrix{1\\\\-i}$. Since the eigenvalues are pure imaginary, we see that the solution for the initial conditions $(x,v) = (1, 0)$ is $x(t) = e^{it}$ and the orbit just goes around a circle with a period of $2\\pi$, neither growing nor decaying. Another weay of seeing this is that the Hamiltonian $H(u, v)$ or sum of potential ($U(x)) = \\frac{1}{2}x^2$) and kinetic energy ($K(v) = \\frac{1}{2}v^2$) is constant, i.e. in vector form, $(x^T x) = \\text{constant}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finite difference methods\n", "\n", "We want to find a finite difference approximation to $u' = Au$ that is **accurate** and **preserves total energy**. If total energy is not preserved, the orbit will either spiral in towards zero or outwards away from the unit circle. If the accuracy is poor, the orbit will not be close to its starting value after $t = 2\\pi$. This gives us an easy way to visualize how good our numerical scheme is. We can also compare the numerical scheme to the Taylor series to evaluate its accuracy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Forward Euler\n", "\n", "The simplest finite difference scheme for integrating ODEs is the forward Euler\n", "\n", "$$\n", "\\frac{u_{n+1} - u_n}{\\Delta t} = A u_n\n", "$$\n", "\n", "Rearranging terms, we get\n", "\n", "$$\n", "u_{n+1} = u_n + \\Delta t A u_n = \\left( I + \\Delta t A \\right) u_n\n", "$$\n", "\n", "Since the eigenvalues of $A$ are $\\pm i$, we see that the eigenvalues of the forward Euler matrix are $1 \\pm i$. Since the absolute value of the eigenvalues is greater than 1, we expect **growing** solutions - i.e. the solution will spiral away from the unit circle." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import scipy.linalg as la" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def f_euler(A, u, N):\n", " orbit = np.zeros((N,2))\n", "\n", " dt = 2*np.pi/N\n", " for i in range(N):\n", " u = u + dt * A @ u\n", " orbit[i] = u\n", " return orbit" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "A = np.array([[0,1],[-1,0]])\n", "u = np.array([1.0,0.0])\n", "N = 64\n", "orbit = f_euler(A, u, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.3600318484671192" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "la.norm(np.array([1.0,0.0]) - orbit[-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Conservation of energy" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([p @ p for p in orbit])\n", "pass" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.subplot(111)\n", "plt.plot(orbit[:, 0], orbit[:,1], 'o')\n", "ax.axis('square')\n", "plt.axis([-1.5, 1.5, -1.5, 1.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy and conservation of energy\n", "\n", "We can see that forward Euler is not very accurate and also does not preserve energy since the orbit spirals away from the unit circle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The trapezoidal method\n", "\n", "The trapezoidal method uses the following scheme\n", "\n", "$$\n", "\\frac{u_{n+1} - u_n}{\\Delta t} = \\frac{1}{2} ( A u_{n+1} + A u_{n})\n", "$$\n", "\n", "This is an implicit scheme (because $u_{n+1}$ appears on the RHS) whose solution is\n", "\n", "$$\n", "u_{n+1} = \\left(I - \\frac{\\Delta t}{2} A \\right)^{-1} \\left(I + \\frac{\\Delta t}{2} A \\right) u_{n} = B u_n\n", "$$\n", "\n", "By inspection, we see that the eigenvalues are the complex conjugates of\n", "\n", "$$\n", "\\frac{1 + \\frac{\\Delta t}{2} i}{1 - \\frac{\\Delta t}{2} i}\n", "$$\n", "\n", "whose absolute value is 1 - hence, energy is conserved. If we expand the matrix $B$ using the geometric series and compare with the Taylor expansion, we see that the trapezoidal method has local truncation error $O(h^3)$ and hence accuracy $O(h^2)$, where $h$ is the time step." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "def trapezoidal(A, u, N):\n", " p = len(u)\n", " orbit = np.zeros((N,p))\n", "\n", " dt = 2*np.pi/N\n", " for i in range(N):\n", " u = la.inv(np.eye(p) - dt/2 * A) @ (np.eye(p) + dt/2 * A) @ u\n", " orbit[i] = u\n", " return orbit" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "A = np.array([[0,1],[-1,0]])\n", "u = np.array([1.0,0.0])\n", "N = 64\n", "orbit = trapezoidal(A, u, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.005039305635733781" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "la.norm(np.array([1.0,0.0]) - orbit[-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Conservation of energy" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([p @ p for p in orbit])\n", "pass" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.subplot(111)\n", "plt.plot(orbit[:, 0], orbit[:,1], 'o')\n", "ax.axis('square')\n", "plt.axis([-1.5, 1.5, -1.5, 1.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The leapfrog method\n", "\n", "The leapfrog method uses a second order difference to update $u_n$. The algorithm simplifies to the following explicit scheme:\n", "\n", "- First take one half-step for v\n", "- Then take a full step for u\n", "- Then take one final half step for v\n", "\n", "It performs almost as well as the trapezoidal method, with the advantage of being an explicit scheme and cheaper to calculate, so the leapfrog method is used in HMC." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def leapfrog(A, u, N):\n", " orbit = np.zeros((N,2))\n", "\n", " dt = 2*np.pi/N\n", " for i in range(N):\n", " u[1] = u[1] + dt/2 * A[1] @ u\n", " u[0] = u[0] + dt * A[0] @ u\n", " u[1] = u[1] + dt/2 * A[1] @ u\n", " orbit[i] = u\n", " return orbit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### If we don't care about the intermediate steps, it is more efficient to just take 1/2 steps at the beginning and end" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def leapfrog2(A, u, N):\n", " dt = 2*np.pi/N\n", "\n", " u[1] = u[1] + dt/2 * A[1] @ u\n", " for i in range(N-1):\n", " u[0] = u[0] + dt * A[0] @ u\n", " u[1] = u[1] + dt * A[1] @ u\n", "\n", " u[0] = u[0] + dt * A[0] @ u\n", " u[1] = u[1] + dt/2 * A[1] @ u \n", " return u" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "A = np.array([[0,1],[-1,0]])\n", "u = np.array([1.0,0.0])\n", "N = 64" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "orbit = leapfrog(A, u, N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Accuracy" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0025229913808033464" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "la.norm(np.array([1.0,0.0]) - orbit[-1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Conservation of energy\n", "\n", "Note that unlike the trapezoidal scheme, energy is not perfectly conserved." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot([p @ p for p in orbit])\n", "pass" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.subplot(111)\n", "plt.plot(orbit[:, 0], orbit[:,1], 'o')\n", "ax.axis('square')\n", "plt.axis([-1.5, 1.5, -1.5, 1.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### From Hamiltonians to probability distributions\n", "\n", "The physical analogy considers the negative log likelihood of the target distribution $p(x)$ to correspond to a potential energy well, with a collection of particles moving on the surface of the well. The state of each particle is given only by its position and momentum (or velocity if we assume unit mass for each particle). In a Hamiltonian system, the total energy $H(x, v) = U(x) + K(v)$ is conserved. From statistical mechanics, the probability of each state is related to the total energy of the system\n", "\n", "$$\n", "\\begin{align}\n", "p(x, v) & \\propto e^{-H(x, v)} \\\\\n", "&= e^{-U(x) - K(v)} \\\\\n", "&= e^{-P(x)}e^{-K(v)} \\\\\n", "& \\propto p(x) \\, p(v)\n", "\\end{align}\n", "$$\n", "\n", "Since the joint distribution factorizes $p(x, v) = p(x)\\, p(v)$, we can select an initial random $v$ for a particle, numerically integrate using a finite difference method such as the leapfrog and then use the updated $x^*$ as the new proposal. The acceptance ratio for the new $x^*$ is\n", "\n", "$$\n", "\\frac{ e^{ -U(x^*)-K(v^*) }} { e^{-U(x)-K(v)} } = e^{U(x)-U(x^*)+K(x)-K(x^*)}\n", "$$\n", "\n", "If our finite difference scheme was exact, the acceptance ration would be 1 since energy is conserved with Hamiltonian dynamics. However, as we have seen, the leapfrog method does not conserve energy perfectly and an accept/reject step is still needed." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "#### Example of HMC\n", "\n", "We will explore how HMC works when the target distribution is bivariate normal centered at zero\n", "\n", "$$\n", "x \\sim N(0, \\Sigma)\n", "$$\n", "\n", "In practice of course, the target distribution will be the posterior distribution and depend on both data and distributional parameters.\n", "\n", "The potential energy or negative log likelihood is proportional to\n", "$$\n", "U(x) = \\frac{x^T\\Sigma^{-1} x}{2}\n", "$$\n", "\n", "The kinetic energy is given by\n", "$$\n", "K(v) = \\frac{v^T v}{2}\n", "$$ \n", "\n", "where the initial $v_0$ is chosen at random from the unit normal at each step.\n", "\n", "To find the time updates, we use the Hamiltonian equations and find the first derivatives of total energy with respect to $x$ and $v$\n", "\n", "$$\n", "\\begin{align}\n", "x' &= \\frac{\\delta K}{\\delta v} &= v \\\\\n", "v' &= -\\frac{\\delta U}{\\delta x} &= -\\Sigma^{-1} x \\\\\n", "\\end{align}\n", "$$\n", "\n", "giving us the block matrix\n", "\n", "$$\n", "A = \\pmatrix{0 & 1 \\\\ -\\Sigma^{-1} & 0}\n", "$$\n", "\n", "By using the first derivatives, we are making use of the gradient information on the log posterior to guide the proposal distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### This is what the target distribution should look like" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sigma = np.array([[1,0.8],[0.8,1]])\n", "mu = np.zeros(2)\n", "ys = np.random.multivariate_normal(mu, sigma, 1000)\n", "sns.kdeplot(ys[:,0], ys[:,1])\n", "plt.axis([-3.5,3.5,-3.5,3.5])\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### This is the HMC posterior" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "def E(A, u0, v0, u, v):\n", " \"\"\"Total energy.\"\"\"\n", " return (u0 @ tau @ u0 + v0 @ v0) - (u @ tau@u + v @ v)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "def leapfrog(A, u, v, h, N):\n", " \"\"\"Leapfrog finite difference scheme.\"\"\"\n", " v = v - h/2 * A @ u\n", " for i in range(N-1):\n", " u = u + h * v\n", " v = v - h * A @ u\n", "\n", " u = u + h * v\n", " v = v - h/2 * A @ u\n", "\n", " return u, v" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "niter = 100\n", "h = 0.01\n", "N = 100\n", "\n", "tau = la.inv(sigma)\n", "\n", "orbit = np.zeros((niter+1, 2))\n", "u = np.array([-3,3])\n", "orbit[0] = u\n", "for k in range(niter):\n", " v0 = np.random.normal(0,1,2)\n", " u, v = leapfrog(tau, u, v0, h, N)\n", "\n", " # accept-reject\n", " u0 = orbit[k]\n", " a = np.exp(E(A, u0, v0, u, v))\n", " r = np.random.rand()\n", "\n", " if r < a:\n", " orbit[k+1] = u\n", " else:\n", " orbit[k+1] = u0" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.kdeplot(orbit[:, 0], orbit[:, 1])\n", "plt.plot(orbit[:,0], orbit[:,1], alpha=0.2)\n", "plt.scatter(orbit[:1,0], orbit[:1,1], c='red', s=30)\n", "plt.scatter(orbit[1:,0], orbit[1:,1], c=np.arange(niter)[::-1], cmap='Reds')\n", "plt.axis([-3.5,3.5,-3.5,3.5])\n", "pass" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.10" } }, "nbformat": 4, "nbformat_minor": 1 }