Skip to content

Instantly share code, notes, and snippets.

@minrk
Created February 2, 2017 14:42
Show Gist options
  • Save minrk/0ba7de8a993e9c534c0703b1b32eae69 to your computer and use it in GitHub Desktop.
Save minrk/0ba7de8a993e9c534c0703b1b32eae69 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Custom Display Logic"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Overview"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As described in the [Rich Output](Rich Output.ipynb) tutorial, the IPython display system can display rich representations of objects in the following formats:\n",
"\n",
"* JavaScript\n",
"* HTML\n",
"* PNG\n",
"* JPEG\n",
"* SVG\n",
"* LaTeX\n",
"* PDF\n",
"* Markdown\n",
"\n",
"This Notebook shows how you can add custom display logic to your own classes, so that they can be displayed using these rich representations. There are two ways of accomplishing this:\n",
"\n",
"1. Implementing special display methods such as `_repr_html_` when you define your class.\n",
"2. Registering a display function for a particular existing class.\n",
"\n",
"This Notebook describes and illustrates both approaches."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import the IPython display functions."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import (\n",
" display, display_html, display_png, display_svg\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Parts of this notebook need the matplotlib inline backend:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Background: classes\n",
"\n",
"Classes let you define new types of objects to use in your code. Most of the code in a larger Python application, like Jupyter, is typically in classes.\n",
"\n",
"Here's how you define a class:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import random\n",
"\n",
"class DiceSet:\n",
" # The special name __init__ makes a 'constructor', which sets up new\n",
" # instances of the class. Instances of this class store two pieces of data.\n",
" def __init__(self, n, sides=6):\n",
" self.n = n\n",
" self.sides = sides\n",
" \n",
" # Functions on classes are called 'methods'. The first argument is an instance\n",
" # of the class.\n",
" def roll(self):\n",
" r = []\n",
" for i in range(self.n):\n",
" r.append(random.randint(1, self.sides))\n",
" return r"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And here's how to use our new class:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[3, 6]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"monopoly_dice = DiceSet(2) # two six-sided dice\n",
"# monopoly_dice is an instance of DiceSet\n",
"monopoly_dice.roll()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[2, 1, 10, 11, 3]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"strange_dice = DiceSet(n=5, sides=11) # another instance of the same class\n",
"strange_dice.roll()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Special display methods"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The main idea of the first approach is that you have to implement special display methods when you define your class, one for each representation you want to use. Here is a list of the names of the special methods and the values they must return:\n",
"\n",
"* `_repr_html_`: return raw HTML as a string\n",
"* `_repr_json_`: return a JSONable dict\n",
"* `_repr_jpeg_`: return raw JPEG data\n",
"* `_repr_png_`: return raw PNG data\n",
"* `_repr_svg_`: return raw SVG data as a string\n",
"* `_repr_latex_`: return LaTeX commands in a string surrounded by \"`$`\"."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As an illustration, we build a class that holds data generated by sampling a Gaussian distribution with given mean and standard deviation. Here is the definition of the `Gaussian` class, which has a custom PNG and LaTeX representation, in addition to a standard `__repr__` representation."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"from IPython.core.pylabtools import print_figure\n",
"from IPython.display import Image, SVG, Math\n",
"\n",
"class Gaussian(object):\n",
" \"\"\"A simple object holding data sampled from a Gaussian distribution.\n",
" \"\"\"\n",
" def __init__(self, mean=0.0, std=1, size=1000):\n",
" self.data = np.random.normal(mean, std, size)\n",
" self.mean = mean\n",
" self.std = std\n",
" self.size = size\n",
" # For caching plots that may be expensive to compute\n",
" self._png_data = None\n",
" \n",
" def __repr__(self):\n",
" return \"A Gaussian process, mean %.2g, std %.2g, N %d\" % (self.mean,\n",
" self.std, \n",
" self.size)\n",
" \n",
" def _figure_data(self, format):\n",
" fig, ax = plt.subplots()\n",
" ax.hist(self.data, bins=50)\n",
" ax.set_title(self._repr_latex_())\n",
" ax.set_xlim(-10.0,10.0)\n",
" data = print_figure(fig, format)\n",
" # We MUST close the figure, otherwise IPython's display machinery\n",
" # will pick it up and send it as output, resulting in a double display\n",
" plt.close(fig)\n",
" return data\n",
" \n",
" def _repr_png_(self):\n",
" if self._png_data is None:\n",
" self._png_data = self._figure_data('png')\n",
" return self._png_data\n",
" \n",
" def _repr_latex_(self):\n",
" return r'$\\mathcal{N}(\\mu=%.2g, \\sigma=%.2g),\\ N=%d$' % (self.mean,\n",
" self.std, self.size)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create an instance of the Gaussian distribution, `print` its standard representation, and return it to display the default representation:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"A Gaussian process, mean 2, std 1, N 1000\n"
]
},
{
"data": {
"image/png": "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\n",
"text/latex": [
"$\\mathcal{N}(\\mu=2, \\sigma=1),\\ N=1000$"
],
"text/plain": [
"A Gaussian process, mean 2, std 1, N 1000"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = Gaussian(2.0, 1.0)\n",
"print(x)\n",
"x"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can also pass the object to the `display` function to display the default representation:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAGMCAYAAAD+wSePAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGkZJREFUeJzt3X2QpVldH/DvmZ3ImzPrwmLcOGprhC01iKyFihJcdsGK\niG0MehKR0ZKYSIUErLCuYiSlliawvKmJMSgFWgNLPCQlDsGigEUWR4RgEQiiy4rJBNq4kOmF3ZUw\ns65z8se9PXund3b75XTP7Tvz+VRNTZ/nee7t3+2+dftb5zkvpfceAAC2Z9+8CwAAWGTCFADAAGEK\nAGCAMAUAMECYAgAYIEwBAAwQpgAABghTAAADhClYIKWUy+ZdAwBnE6ZgAZRSHltK+eMkf1FKecj0\n2DVzLmtPK6VcVkp5wbzrAC58whTsEaWU95RSnnI/p38+yauTXNN7/1wp5SeSfOw81vblpZQXl1J+\nsZTytlLK15+v772RUsqDSym/Ukp54uzx3vunk3yolPLMOZW2Lff3ekoph0opryqlPLeU8upSytLo\nOWBn7J93AUBSSjmQ5JuSPD3JO9ade3yS1/be/8u0/U1J7uq9f/w81VaS/FiS5/beeynlHyR5Wynl\n0b331fNRwwPU9iNJviLJ9yR5w/rzvfd3lFJaKeU/997vPu8FbtEGr+dIkp/qvf/+9D3whiRPGDwH\n7AA9U7A3fGWS9yT5++c495Qkb59pvyDJb5yPoqYeleSbk1wxbf92kofl3LWeV733V/XefzzJXz7A\nZW9K8n3b/R6llAeVUl5USvnjUsqfrDv3faWUW0opR0spwz+P+3s9pZRHJXls7/33p9e9N8mVpZQv\n3e650VqBewlTsDc8Jsm/SnJFKeWqdecu7b3fmSSllEckKb33BwoPO+0vk3xxkr+VJL33v54ee/h5\nrGHE7yX5ru0+uPd+KslLkvz7JA+ZDU299zck+fXe+3Lv/U3Dld6/r03yiXXHVjIJuds9B+wQYQr2\nhr+d5N1JfjfJM9YOllIeluSumeuuTvKB9Q+e9kI8Zab95evH3GxX7/3/9N4f2Xv/w+lzf0kmQeo9\nO/H8u633/olMbp2NeFKSd2USqH583bm/HnzuzfjCJJ9bd+z/JfmigXPADjFmCvaI6Xik30zyk5n0\nUiWTP+Lvnrnsa5Lcco6H/4skf5F7x1tdn+RPkxxbu6CU8gVJXjHzmDL77aftnuSVvfcPP0Cpz03y\nlrVbRxsppfzDJP8yk56tByVZTXIqybf13j+1w7Xdn/2llIf03tcHi816zHT81UqSF5VSnth7P1ZK\nuTLJrbMX7tJruSzJ+jFfdyc5kOSh2zwH7BBhCuaslPJFSW6bNn8ryX9c+2OdyaD0n5u5/PIkd5zj\naa5O8sMz7ScnedXsBb33zyR59mCtX53k2zIZx7WZ638mk96Rb80kRBxL8iNrvVw7WdsGPpPk0ty3\nl2azSpL03u8spbwmk7B6LMk1SV43e+EuvZa7znHsoUluz7nvMGzmHLBDhCmYv6dl2qPUe/9MKeVt\nSf5JJn+sH9R7/6uZaz8vyT2zD57OBPzi3vuHpu0rklzee//gThZZSnlokn+T5Gm99w3/GJdSHpfk\ne5N8Te+9T4/97yRfluQPH+ixu+BB2WaQKqU8MsmnZg79YpKPllK+JsllvfdzBZ2ddluSz1937GFJ\nPplJ0NvOOWCHCFMwf1/Ve3/NTPtXkvxWKeWlST677trVJF+w7tiTcvY4qmuS3FxK+fwkV/Te/zQ5\ns3r6yx+gjo1uP/18kh/tvd82XS7hH00HYN+fpyZ560yQOpDksZkExbO/8XhtG/n83vu5evQ246lJ\n3rnW6L0fL6X8dia3Yu8TCnfptbwnyaGZ73FJJqH0w5lMBtjquT/a5PcFNkGYgjmYzsp7Zibjbc4a\nc9N7/53paue/mcn6TrM+kclts1lXJzk9fd6DmYSVt2eyZtVNM8/76Wzz9lMp5fmZ9M5cOR0n9KWZ\njNHKdAHPy3rv71j3sA8mqdNrLkny4iTPP9faVCO1baL2/Uk+PdO+v3rvz5f33m9cd+wVmQScf7f+\n4t14Lb33Py+l/K9Syjf03v9bJrdaP9B7/2iSbOPcucbdAdskTMF8PD6T20X/M5NB5ev9WCa9G+9e\nd/zdSa7LpPdqzdVJ3lpK+eFMZmo9M5M/5p/tvf/f0UJLKY9O8tIkl6w7tVb392fSe/OY2ZO997dN\n12j6x5ncZntl731HV20vpfxgkm/PpPflFaWUY0mu673P3gp9XJI/mGmfs95zPPdVSZ6TZLmUcknv\n/WfXzvXe31tKeUuS9+3MKznzPR/o9fxAkp8qpfxhkqumr2PNds8BO6BMe+CB86yU8nVJbuu937bh\nxWc/7u2996dOvz6Q5GO997+5GzVuoaYf7L2fz4VEN62U8tNJjvbePzBzbM/WCyyeTfdM1Vq/I8mj\n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\n",
"text/latex": [
"$\\mathcal{N}(\\mu=2, \\sigma=1),\\ N=1000$"
],
"text/plain": [
"A Gaussian process, mean 2, std 1, N 1000"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use `display_png` to view the PNG representation:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_png(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-success\">\n",
"It is important to note a subtle different between <code>display</code> and <code>display_png</code>. The former computes <em>all</em> representations of the object, and lets the notebook UI decide which to display. The later only computes the PNG representation.\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a new Gaussian with different parameters:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n+fITjbXWHUmGDVcHADCH1huwlpJckSS11l1JLkryV7XWJ4/bvzvJhzdeHgDA/FnvHKz/keSXaq03\nZ9RT9eNJPpnkxnHv1Z1JXtKnRACA+bKugNVa+1KSf3GSpis2Vg4AwPyz0CgAQGcCFgBAZwIWAEBn\nAhYAQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIW\nAEBnAhYAQGcCFgBAZwIWAEBnO7e6AGBtjhzZkcXFMrX92LHpbQBsLgEL5sTiYsm+fedObT9w4N5N\nrAaAlRgiBADoTMACAOhMwAIA6EzAAgDoTMACAOhMwAIA6EzAAgDoTMACAOhMwAIA6EzAAgDozK1y\nYEa41yCn286dyeHDZ01t37NnyMLC8U2sCLYvAQtmhHsNcrotLZXs379ravvBg/dkYWHz6oHtzBAh\nAEBnAhYAQGcCFgBAZ+ZgAZDEJHjoScACIIlJ8NCTIUIAgM4ELACAzgQsAIDOBCwAgM42NMm91vrV\nSW5O8j1JPpXkhoxC251JXtpau2/DFQIAzJl192DVWkuSVye5MUlJcm2Sl7fWLkvy1iSv6lIhAMCc\n2cgQ4dVJ3pTkC+PtC1prHx///PYkT99IYQAA82pdAavW+tQkaa39UUa9V0nywOpzrTUr0QEAZ6z1\nzsG6Ism31VqfmWRvksvyYE9Waq07kgwbLw8AYP6sK2C11q458XOt9T8keVeSf1VrfXJr7dYk353k\nw31KBACYLz1vlfOqJG8d917dmeQlHV8bAGBubDhgtdZ+emLzio2+HgDAvLPQKABAZwIWAEBnAhYA\nQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGc9b5UDrODIkR1ZXCxT248dm94GwHwRsGCT\nLC6W7Nt37tT2Awfu3cRqADidDBECAHQmYAEAdCZgAQB0JmABAHQmYAEAdCZgAQB0JmABAHRmHSwA\n1mTnzuTw4bOmtu/ZM2Rh4fgmVgSzS8ACYE2Wlkr27981tf3gwXuysLB59cAsM0QIANCZHiwAulht\nCHH37iFHj06/56YhRrYTAQuALlYbQjxw4F5DjJwxDBECAHQmYAEAdCZgAQB0JmABAHQmYAEAdCZg\nAQB0JmABAHQmYAEAdCZgAQB0JmABAHTmVjnQwZEjO7K4OP0ea0ly7NjK7QBsHwIWdLC4WLJv37kr\nHnPgwL2bVA0AW80QIQBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGfrWqah1lqS/Lckfy9JSfKa\nJJ9J8itJ7k9yW2vtyl5FAgDMk/X2YD0lyZ+21i5J8oIkr05yXZIXtdYuTXJ7rXV/nxIBAObLunqw\nWmsfTfLR8eajkhxNUlprnxnve0uS1yU5sOEKAQDmzIbmYNVaz0/y5iRvTHLXRNOdSc7byGsDAMyr\ndd8qp9Z6YZJfTfIjSf4yyWMnmi/IQwMXAMAZY109WLXWi5L8WpJ/3Vr7ZGvtC0keMd6fJPuT3NSp\nRgCAubLeHqyrkywk+bXxFYVLSa5K8rZa64mrCH+uT4kAAPNlvZPcr8ooUC337I2VAwAw/yw0CgDQ\n2bonucN2cuTIjiwulqntu3cPOXp0evuxY9PbADjzCFiQZHGxZN++c6e2Hzhwb/bv37ViOwCcYIgQ\nAKAzAQsAoDMBCwCgMwELAKAzAQsAoDMBCwCgMwELAKAzAQsAoDMLjXJGWG2ldiuxA9CTgMUZYS0r\ntQNAL4YIAQA6E7AAADoTsAAAOhOwAAA6E7AAADoTsAAAOhOwAAA6E7AAADoTsAAAOhOwAAA6E7AA\nADpzL0IAZsLOncnhw2dNbd+zZ8jCwvFNrAjWT8ACYCYsLZXs379ravvBg/dkYWHz6oGNELDYFo4c\n2ZHFxTK1/dix6W3AmWG17wk9ZPQkYLEtLC6W7Nt37tT2Awfu3cRqgFm02veEHjJ6MskdAKAzPVgA\nzAWT4JknAhYAc8EkeOaJIUIAgM4ELACAzgwRMhcswwDAPBGwmAuWYQBgnhgiBADoTA8WM8EQIADb\niYDFTDAECMB2ImCxKfRQAafbaguR+p5hMwlYbAo9VMDpttpCpL5n2EwmuQMAdKYH6wyx2hDdavfw\nWu35u3cPOXrUECAAJKchYNVar03ybUlKkqtaax/pfQ5O3WpDdKvdw2stQ3y65gFgpGvAqrU+L8nx\n1tq311p3J3lHkkt6nmM7+ou/2JE/+qPpEzOf9KQv5eyzs6EeqNWYHApw+p3u0YSN/i2gn949WJcn\nuSFJWmtHa6231lof31r7VOfzbCtHjyYve9k5U9vf/ObP5nGPO76hHqjVmBwKcPqd7tGEjf4toJ/e\nAev8JHdObC+N9wlYKzjnnOS1r/381Pa9e7+Uu+/WgwQA86IMw9DtxWqt/znJja21W8fbv5jkmpP1\nYN100039TgwAcJpdccUVa+7t6N2D9b4kL03yY7XWxyR50rThwVMpEgBgnnRdB6u19p4kqbX+fpLf\nSfKqnq8PADAPug4RAgBgJXcAgO4ELACAzgQsAIDOtuRehLXWS5L8ZpKntNb+ZrzvFUlqRrfYuaa1\ndnAramM21Vq/P6OLJj4z3vUjrbX/tYUlMYPcqou1qrUuJfnYePNdrbVrt7IeZsv4bjQ3JjnUWru2\n1voNSX45yf1JbmutXbnaa2x6D1at9auS/EBGSzqc2Lc3yTNaa8/K6NY6V9daH7HZtTHzfqq1dvn4\nIVzxEJO36krygiSv3+KSmG0fmfg+Ea5Y7nVJ3jmxfV2SF7XWLk1ye611/2ovsOkBq7X26dbaDyT5\n4sTuyzJKimmt3Z/RPQyfttm1MfNeWWv9cK31uq0uhJn0kFt1Jbm11vr4rS2JGfZNtdZDtdb31lq/\ncquLYbaMe6g+niS11kcm+Vxr7cQIylsy+r5Z0WkbIhz3Sv18khPrQJQkd4zD1XLn58Gu2uTBW+xw\nhpn2e5Pkytbab4yP+S+11ue01t67RWUym9yqi1Pxta21L9Zan5rkmiSr9khwxjovyV0T23eO963o\ntAWs1tqfJPmONR5+V5ILJ7YvSPLJ7kUx89b4e/P2JN+cRMBi0lJG3x1/Pd6+IA/9UoQHtNa+OP73\nD2qtj93qephpdyeZ/B1Z03fLrFxF+L4kL06SWuuXJXl+EpNTeUCt9VW11seNN1+Y5JatrIeZdOJW\nXVntVl2c2WqtT6+1/uPxzxfnwVAOD9Na+0KSR9RaLxrv2p/kptWet5UB64El5Ftrtyf5UK31A0kO\nJbmutXbfllXGLPqDJAdrre9Pcldr7f1bWw6zxq26OAWfSLK/1vp7SV6T5NVbXA+z7+okbxv/DXpC\na+2G1Z7gVjkAAJ3NyhAhAMC2IWABAHQmYAEAdCZgAQB0JmABAHQmYAEAdCZgAQB0JmABAHQmYAEA\ndPb/ASvLxKqBpm27AAAAAElFTkSuQmCC\n",
"text/latex": [
"$\\mathcal{N}(\\mu=0, \\sigma=2),\\ N=2000$"
],
"text/plain": [
"A Gaussian process, mean 0, std 2, N 2000"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x2 = Gaussian(0, 2, 2000)\n",
"x2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can then compare the two Gaussians by displaying their histograms:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n"
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n+fITjbXWHUmGDVcHADCH1huwlpJckSS11l1JLkryV7XWJ4/bvzvJhzdeHgDA/FnvHKz/keSXaq03\nZ9RT9eNJPpnkxnHv1Z1JXtKnRACA+bKugNVa+1KSf3GSpis2Vg4AwPyz0CgAQGcCFgBAZwIWAEBn\nAhYAQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIW\nAEBnAhYAQGcCFgBAZwIWAEBnO7e6AGBtjhzZkcXFMrX92LHpbQBsLgEL5sTiYsm+fedObT9w4N5N\nrAaAlRgiBADoTMACAOhMwAIA6EzAAgDoTMACAOhMwAIA6EzAAgDoTMACAOhMwAIA6EzAAgDozK1y\nYEa41yCn286dyeHDZ01t37NnyMLC8U2sCLYvAQtmhHsNcrotLZXs379ravvBg/dkYWHz6oHtzBAh\nAEBnAhYAQGcCFgBAZ+ZgAZDEJHjoScACIIlJ8NCTIUIAgM4ELACAzgQsAIDOBCwAgM42NMm91vrV\nSW5O8j1JPpXkhoxC251JXtpau2/DFQIAzJl192DVWkuSVye5MUlJcm2Sl7fWLkvy1iSv6lIhAMCc\n2cgQ4dVJ3pTkC+PtC1prHx///PYkT99IYQAA82pdAavW+tQkaa39UUa9V0nywOpzrTUr0QEAZ6z1\nzsG6Ism31VqfmWRvksvyYE9Waq07kgwbLw8AYP6sK2C11q458XOt9T8keVeSf1VrfXJr7dYk353k\nw31KBACYLz1vlfOqJG8d917dmeQlHV8bAGBubDhgtdZ+emLzio2+HgDAvLPQKABAZwIWAEBnAhYA\nQGcCFgBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGc9b5UDrODIkR1ZXCxT248dm94GwHwRsGCT\nLC6W7Nt37tT2Awfu3cRqADidDBECAHQmYAEAdCZgAQB0JmABAHQmYAEAdCZgAQB0JmABAHRmHSwA\n1mTnzuTw4bOmtu/ZM2Rh4fgmVgSzS8ACYE2Wlkr27981tf3gwXuysLB59cAsM0QIANCZHiwAulht\nCHH37iFHj06/56YhRrYTAQuALlYbQjxw4F5DjJwxDBECAHQmYAEAdCZgAQB0JmABAHQmYAEAdCZg\nAQB0JmABAHQmYAEAdCZgAQB0JmABAHTmVjnQwZEjO7K4OP0ea0ly7NjK7QBsHwIWdLC4WLJv37kr\nHnPgwL2bVA0AW80QIQBAZwIWAEBnAhYAQGcCFgBAZwIWAEBnAhYAQGfrWqah1lqS/Lckfy9JSfKa\nJJ9J8itJ7k9yW2vtyl5FAgDMk/X2YD0lyZ+21i5J8oIkr05yXZIXtdYuTXJ7rXV/nxIBAObLunqw\nWmsfTfLR8eajkhxNUlprnxnve0uS1yU5sOEKAQDmzIbmYNVaz0/y5iRvTHLXRNOdSc7byGsDAMyr\ndd8qp9Z6YZJfTfIjSf4yyWMnmi/IQwMXAMAZY109WLXWi5L8WpJ/3Vr7ZGvtC0keMd6fJPuT3NSp\nRgCAubLeHqyrkywk+bXxFYVLSa5K8rZa64mrCH+uT4kAAPNlvZPcr8ooUC337I2VAwAw/yw0CgDQ\n2bonucN2cuTIjiwulqntu3cPOXp0evuxY9PbADjzCFiQZHGxZN++c6e2Hzhwb/bv37ViOwCcYIgQ\nAKAzAQsAoDMBCwCgMwELAKAzAQsAoDMBCwCgMwELAKAzAQsAoDMLjXJGWG2ldiuxA9CTgMUZYS0r\ntQNAL4YIAQA6E7AAADoTsAAAOhOwAAA6E7AAADoTsAAAOhOwAAA6E7AAADoTsAAAOhOwAAA6E7AA\nADpzL0IAZsLOncnhw2dNbd+zZ8jCwvFNrAjWT8ACYCYsLZXs379ravvBg/dkYWHz6oGNELDYFo4c\n2ZHFxTK1/dix6W3AmWG17wk9ZPQkYLEtLC6W7Nt37tT2Awfu3cRqgFm02veEHjJ6MskdAKAzPVgA\nzAWT4JknAhYAc8EkeOaJIUIAgM4ELACAzgwRMhcswwDAPBGwmAuWYQBgnhgiBADoTA8WM8EQIADb\niYDFTDAECMB2ImCxKfRQAafbaguR+p5hMwlYbAo9VMDpttpCpL5n2EwmuQMAdKYH6wyx2hDdavfw\nWu35u3cPOXrUECAAJKchYNVar03ybUlKkqtaax/pfQ5O3WpDdKvdw2stQ3y65gFgpGvAqrU+L8nx\n1tq311p3J3lHkkt6nmM7+ou/2JE/+qPpEzOf9KQv5eyzs6EeqNWYHApw+p3u0YSN/i2gn949WJcn\nuSFJWmtHa6231lof31r7VOfzbCtHjyYve9k5U9vf/ObP5nGPO76hHqjVmBwKcPqd7tGEjf4toJ/e\nAev8JHdObC+N9wlYKzjnnOS1r/381Pa9e7+Uu+/WgwQA86IMw9DtxWqt/znJja21W8fbv5jkmpP1\nYN100039TgwAcJpdccUVa+7t6N2D9b4kL03yY7XWxyR50rThwVMpEgBgnnRdB6u19p4kqbX+fpLf\nSfKqnq8PADAPug4RAgBgJXcAgO4ELACAzgQsAIDOtuRehLXWS5L8ZpKntNb+ZrzvFUlqRrfYuaa1\ndnAramM21Vq/P6OLJj4z3vUjrbX/tYUlMYPcqou1qrUuJfnYePNdrbVrt7IeZsv4bjQ3JjnUWru2\n1voNSX45yf1JbmutXbnaa2x6D1at9auS/EBGSzqc2Lc3yTNaa8/K6NY6V9daH7HZtTHzfqq1dvn4\nIVzxEJO36krygiSv3+KSmG0fmfg+Ea5Y7nVJ3jmxfV2SF7XWLk1ye611/2ovsOkBq7X26dbaDyT5\n4sTuyzJKimmt3Z/RPQyfttm1MfNeWWv9cK31uq0uhJn0kFt1Jbm11vr4rS2JGfZNtdZDtdb31lq/\ncquLYbaMe6g+niS11kcm+Vxr7cQIylsy+r5Z0WkbIhz3Sv18khPrQJQkd4zD1XLn58Gu2uTBW+xw\nhpn2e5Pkytbab4yP+S+11ue01t67RWUym9yqi1Pxta21L9Zan5rkmiSr9khwxjovyV0T23eO963o\ntAWs1tqfJPmONR5+V5ILJ7YvSPLJ7kUx89b4e/P2JN+cRMBi0lJG3x1/Pd6+IA/9UoQHtNa+OP73\nD2qtj93qephpdyeZ/B1Z03fLrFxF+L4kL06SWuuXJXl+EpNTeUCt9VW11seNN1+Y5JatrIeZdOJW\nXVntVl2c2WqtT6+1/uPxzxfnwVAOD9Na+0KSR9RaLxrv2p/kptWet5UB64El5Ftrtyf5UK31A0kO\nJbmutXbfllXGLPqDJAdrre9Pcldr7f1bWw6zxq26OAWfSLK/1vp7SV6T5NVbXA+z7+okbxv/DXpC\na+2G1Z7gVjkAAJ3NyhAhAMC2IWABAHQmYAEAdCZgAQB0JmABAHQmYAEAdCZgAQB0JmABAHQmYAEA\ndPb/ASvLxKqBpm27AAAAAElFTkSuQmCC\n"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display_png(x)\n",
"display_png(x2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that like `print`, you can call any of the `display` functions multiple times in a cell."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Adding IPython display support to existing objects"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When you are directly writing your own classes, you can adapt them for display in IPython by following the above approach. But in practice, you often need to work with existing classes that you can't easily modify. We now illustrate how to add rich output capabilities to existing objects. We will use the NumPy polynomials and change their default representation to be a formatted LaTeX expression."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, consider how a NumPy polynomial object renders by default:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Polynomial([ 1., 2., 3.], [-10., 10.], [-1, 1])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = np.polynomial.Polynomial([1,2,3], [-10, 10])\n",
"p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, define a function that pretty-prints a polynomial as a LaTeX string:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def poly_to_latex(p):\n",
" terms = ['%.2g' % p.coef[0]]\n",
" if len(p) > 1:\n",
" term = 'x'\n",
" c = p.coef[1]\n",
" if c!=1:\n",
" term = ('%.2g ' % c) + term\n",
" terms.append(term)\n",
" if len(p) > 2:\n",
" for i in range(2, len(p)):\n",
" term = 'x^%d' % i\n",
" c = p.coef[i]\n",
" if c!=1:\n",
" term = ('%.2g ' % c) + term\n",
" terms.append(term)\n",
" px = '$P(x)=%s$' % '+'.join(terms)\n",
" dom = r', $x \\in [%.2g,\\ %.2g]$' % tuple(p.domain)\n",
" return px+dom"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This produces, on our polynomial ``p``, the following:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'$P(x)=1+2 x+3 x^2$, $x \\\\in [-10,\\\\ 10]$'"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"poly_to_latex(p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can render this string using the `Latex` class:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$P(x)=1+2 x+3 x^2$, $x \\in [-10,\\ 10]$"
],
"text/plain": [
"<IPython.core.display.Latex object>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import Latex\n",
"Latex(poly_to_latex(p))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, you can configure IPython to do this automatically by registering the `Polynomial` class and the `plot_to_latex` function with an IPython display formatter. Let's look at the default formatters provided by IPython:"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" text/html : HTMLFormatter\n",
" image/svg+xml : SVGFormatter\n",
" application/json : JSONFormatter\n",
" application/pdf : PDFFormatter\n",
" image/png : PNGFormatter\n",
" text/plain : PlainTextFormatter\n",
" application/javascript : JavascriptFormatter\n",
" image/jpeg : JPEGFormatter\n",
" text/latex : LatexFormatter\n",
" text/markdown : MarkdownFormatter\n"
]
}
],
"source": [
"ip = get_ipython()\n",
"for mime, formatter in ip.display_formatter.formatters.items():\n",
" print('%24s : %s' % (mime, formatter.__class__.__name__))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `formatters` attribute is a dictionary keyed by MIME types. To define a custom LaTeX display function, you want a handle on the `text/latex` formatter:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"ip = get_ipython()\n",
"latex_f = ip.display_formatter.formatters['text/latex']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The formatter object has a couple of methods for registering custom display functions for existing types."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on method for_type in module IPython.core.formatters:\n",
"\n",
"for_type(typ, func=None) method of IPython.core.formatters.LatexFormatter instance\n",
" Add a format function for a given type.\n",
" \n",
" Parameters\n",
" -----------\n",
" typ : type or '__module__.__name__' string for a type\n",
" The class of the object that will be formatted using `func`.\n",
" func : callable\n",
" A callable for computing the format data.\n",
" `func` will be called with the object to be formatted,\n",
" and will return the raw data in this formatter's format.\n",
" Subclasses may use a different call signature for the\n",
" `func` argument.\n",
" \n",
" If `func` is None or not specified, there will be no change,\n",
" only returning the current value.\n",
" \n",
" Returns\n",
" -------\n",
" oldfunc : callable\n",
" The currently registered callable.\n",
" If you are registering a new formatter,\n",
" this will be the previous value (to enable restoring later).\n",
"\n"
]
}
],
"source": [
"help(latex_f.for_type)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Help on method for_type_by_name in module IPython.core.formatters:\n",
"\n",
"for_type_by_name(type_module, type_name, func=None) method of IPython.core.formatters.LatexFormatter instance\n",
" Add a format function for a type specified by the full dotted\n",
" module and name of the type, rather than the type of the object.\n",
" \n",
" Parameters\n",
" ----------\n",
" type_module : str\n",
" The full dotted name of the module the type is defined in, like\n",
" ``numpy``.\n",
" type_name : str\n",
" The name of the type (the class name), like ``dtype``\n",
" func : callable\n",
" A callable for computing the format data.\n",
" `func` will be called with the object to be formatted,\n",
" and will return the raw data in this formatter's format.\n",
" Subclasses may use a different call signature for the\n",
" `func` argument.\n",
" \n",
" If `func` is None or unspecified, there will be no change,\n",
" only returning the current value.\n",
" \n",
" Returns\n",
" -------\n",
" oldfunc : callable\n",
" The currently registered callable.\n",
" If you are registering a new formatter,\n",
" this will be the previous value (to enable restoring later).\n",
"\n"
]
}
],
"source": [
"help(latex_f.for_type_by_name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this case, we will use `for_type_by_name` to register `poly_to_latex` as the display function for the `Polynomial` type:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"latex_f.for_type_by_name('numpy.polynomial.polynomial',\n",
" 'Polynomial', poly_to_latex)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once the custom display function has been registered, all NumPy `Polynomial` instances will be represented by their LaTeX form instead:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$P(x)=1+2 x+3 x^2$, $x \\in [-10,\\ 10]$"
],
"text/plain": [
"Polynomial([ 1., 2., 3.], [-10., 10.], [-1, 1])"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$P(x)=-20+71 x+-15 x^2+x^3$, $x \\in [-1,\\ 1]$"
],
"text/plain": [
"Polynomial([-20., 71., -15., 1.], [-1, 1], [-1, 1])"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p2 = np.polynomial.Polynomial([-20, 71, -15, 1])\n",
"p2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## More complex display with `_ipython_display_`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rich output special methods and functions can only display one object or MIME type at a time. Sometimes this is not enough if you want to display multiple objects or MIME types at once. An example of this would be to use an HTML representation to put some HTML elements in the DOM and then use a JavaScript representation to add events to those elements.\n",
"\n",
"**IPython** recognizes another display method, `_ipython_display_`, which allows your objects to take complete control of displaying themselves. If this method is defined, IPython will call it, and make no effort to display the object using the above described `_repr_*_` methods for custom display functions. It's a way for you to say \"Back off, IPython, I can display this myself.\" Most importantly, your `_ipython_display_` method can make multiple calls to the top-level `display` functions to accomplish its goals.\n",
"\n",
"Here is an object that uses `display_html` and `display_javascript` to make a plot using the [Flot](http://www.flotcharts.org/) JavaScript plotting library:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import uuid\n",
"from IPython.display import display_javascript, display_html, display\n",
"\n",
"class FlotPlot(object):\n",
" def __init__(self, x, y):\n",
" self.x = x\n",
" self.y = y\n",
" self.uuid = str(uuid.uuid4())\n",
" \n",
" def _ipython_display_(self):\n",
" json_data = json.dumps(list(zip(self.x, self.y)))\n",
" display_html('<div id=\"{}\" style=\"height: 300px; width:80%;\"></div>'.format(self.uuid),\n",
" raw=True\n",
" )\n",
" display_javascript(\"\"\"\n",
" require([\"https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.2/jquery.flot.min.js\"], function() {\n",
" var line = JSON.parse(\"%s\");\n",
" console.log(line);\n",
" $.plot(\"#%s\", [line]);\n",
" });\n",
" \"\"\" % (json_data, self.uuid), raw=True)\n"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div id=\"1c27e2d0-ee68-4944-8611-06edf1d505d5\" style=\"height: 300px; width:80%;\"></div>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/javascript": [
"\n",
" require([\"https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.2/jquery.flot.min.js\"], function() {\n",
" var line = JSON.parse(\"[[0.0, 0.0], [0.20408163265306123, 0.20266793654820095], [0.40816326530612246, 0.39692414892492234], [0.6122448979591837, 0.5747060412161791], [0.8163265306122449, 0.7286347834693503], [1.0204081632653061, 0.8523215697196184], [1.2244897959183674, 0.9406327851124867], [1.4285714285714286, 0.9899030763721239], [1.6326530612244898, 0.9980874821347183], [1.836734693877551, 0.9648463089837632], [2.0408163265306123, 0.8915592304110037], [2.2448979591836737, 0.7812680235262639], [2.4489795918367347, 0.6385503202266021], [2.6530612244897958, 0.469329612777201], [2.857142857142857, 0.28062939951435684], [3.0612244897959187, 0.0802816748428135], [3.2653061224489797, -0.12339813736217871], [3.4693877551020407, -0.3219563150726187], [3.673469387755102, -0.5071517094845144], [3.8775510204081636, -0.6712977935519321], [4.081632653061225, -0.8075816909683364], [4.285714285714286, -0.9103469443107828], [4.4897959183673475, -0.9753282860670456], [4.6938775510204085, -0.9998286683840896], [4.8979591836734695, -0.9828312039256306], [5.1020408163265305, -0.9250413717382029], [5.3061224489795915, -0.8288577363730427], [5.510204081632653, -0.6982723955653996], [5.714285714285714, -0.5387052883861563], [5.918367346938775, -0.35677924089893803], [6.122448979591837, -0.16004508604325057], [6.326530612244898, 0.04333173336868346], [6.530612244897959, 0.2449100710119793], [6.73469387755102, 0.4363234264718193], [6.938775510204081, 0.6096271964908323], [7.142857142857143, 0.7576284153927202], [7.346938775510204, 0.8741842988197335], [7.551020408163265, 0.9544571997387519], [7.755102040816327, 0.9951153947776636], [7.959183673469388, 0.9944713672636168], [8.16326530612245, 0.9525518475314604], [8.36734693877551, 0.8710967034823207], [8.571428571428571, 0.7534867274396376], [8.775510204081632, 0.6046033165061543], [8.979591836734695, 0.43062587038273736], [9.183673469387756, 0.23877531564403087], [9.387755102040817, 0.03701440148506237], [9.591836734693878, -0.1662827938487564], [9.795918367346939, -0.3626784288265488], [10.0, -0.5440211108893699]]\");\n",
" console.log(line);\n",
" $.plot(\"#1c27e2d0-ee68-4944-8611-06edf1d505d5\", [line]);\n",
" });\n",
" "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"x = np.linspace(0,10)\n",
"y = np.sin(x)\n",
"FlotPlot(x, np.sin(x))"
]
}
],
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment