Skip to content

Instantly share code, notes, and snippets.

@RutgerK
Created January 4, 2016 08:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RutgerK/4da511276728ed16c454 to your computer and use it in GitHub Desktop.
Save RutgerK/4da511276728ed16c454 to your computer and use it in GitHub Desktop.
bokeh_dev9
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import bokeh\n",
"from bokeh.plotting import figure, output_notebook, show\n",
"from bokeh.models.renderers import TileRenderer\n",
"from bokeh.tile_providers import STAMEN_TONER\n",
"from bokeh.models import Range1d"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'0.11.0dev9'"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"bokeh.__version__"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
"<script type=\"text/javascript\" src=\"https://cdn.pydata.org/bokeh/dev/bokeh-0.11.0dev9.min.js\"></script>\n",
"<script type=\"text/javascript\" src=\"https://cdn.pydata.org/bokeh/dev/bokeh-widgets-0.11.0dev9.min.js\"></script>\n",
"<script type=\"text/javascript\" src=\"https://cdn.pydata.org/bokeh/dev/bokeh-compiler-0.11.0dev9.min.js\"></script>\n",
"<script type=\"text/javascript\">\n",
" Bokeh.set_log_level(\"info\");\n",
"</script>\n",
" \n",
"<link rel=\"stylesheet\" href=\"https://cdn.pydata.org/bokeh/dev/bokeh-0.11.0dev9.min.css\" type=\"text/css\" />\n",
"<link rel=\"stylesheet\" href=\"https://cdn.pydata.org/bokeh/dev/bokeh-widgets-0.11.0dev9.min.css\" type=\"text/css\" />\n",
" <div>\n",
" <a href=\"http://bokeh.pydata.org\" target=\"_blank\" class=\"bk-logo bk-logo-small bk-logo-notebook\"></a>\n",
" <span>BokehJS successfully loaded.</span>\n",
" </div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"output_notebook()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class SnappingTileRenderer(TileRenderer):\n",
" __implementation__ = \"\"\"\n",
" _ = require \"underscore\"\n",
" $ = require \"jquery\"\n",
" Util = require \"util/util\"\n",
" TileRenderer = require \"renderer/tile/tile_renderer\"\n",
" class SnappingTileRendererView extends TileRenderer.View\n",
" type: \"SnappingTileRendererView\"\n",
" _set_data: () ->\n",
" super\n",
" @plot_view.$el.dblclick(@on_double_click)\n",
" on_double_click: (e) =>\n",
" extent = @get_extent()\n",
" [xmin, ymin, xmax, ymax] = extent\n",
" \n",
" x_percent = .5\n",
" y_percent = .5\n",
"\n",
" zoom_level = @mget('tile_source').get_closest_level_by_extent(extent, @map_frame.get('height'), @map_frame.get('width'))\n",
" old_resolution = @mget('tile_source').get_resolution(zoom_level)\n",
" \n",
" center_x = xmin + (e.offsetX * old_resolution)\n",
" center_y = ymax - (e.offsetY * old_resolution)\n",
" \n",
" if e.shiftKey\n",
" zoom_level = zoom_level - 1\n",
" else\n",
" zoom_level = zoom_level + 1\n",
" \n",
" new_resolution = @mget('tile_source').get_resolution(zoom_level)\n",
" new_xrange = new_resolution * @map_frame.get('width')\n",
" new_yrange = new_resolution * @map_frame.get('height')\n",
"\n",
" nxmin = center_x - (x_percent * new_xrange)\n",
" nymin = center_y - (y_percent * new_yrange)\n",
" nxmax = nxmin + new_xrange\n",
" nymax = nymin + new_yrange\n",
" \n",
" new_extent = @mget('tile_source').snap_to_zoom([nxmin, nymin, nxmax, nymax], @map_frame.get('height'), @map_frame.get('width'), zoom_level)\n",
" @x_range.set('start', new_extent[0])\n",
" @y_range.set('start', new_extent[1])\n",
" @x_range.set('end', new_extent[2])\n",
" @y_range.set('end', new_extent[3])\n",
" class SnappingTileRenderer extends TileRenderer.Model\n",
" default_view: SnappingTileRendererView\n",
" type: 'SnappingTileRenderer'\n",
" module.exports =\n",
" Model: SnappingTileRenderer\n",
" View: SnappingTileRendererView\n",
" \"\"\"\n",
"\n",
"def create_plot():\n",
" axis_range = [-15000000, 15000000]\n",
" x_range = Range1d(*axis_range)\n",
" y_range = Range1d(*axis_range)\n",
" p = figure(tools='pan,wheel_zoom', x_range=x_range, y_range=y_range, plot_height=800, plot_width=800, \n",
" min_border_top=0, min_border_left=0, min_border_right=0, min_border_bottom=0)\n",
" p.axis.visible = False\n",
" p.renderers.append(SnappingTileRenderer(tile_source=STAMEN_TONER))\n",
" \n",
" return p\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" <script type=\"text/javascript\">\n",
" \n",
" (function outer(modules, cache, entry) {\n",
" if (Bokeh) {\n",
" for (var name in modules) {\n",
" var module = modules[name];\n",
" \n",
" if (typeof(module) === \"string\") {\n",
" try {\n",
" coffee = Bokeh.require(\"coffee-script\")\n",
" } catch (e) {\n",
" throw new Error(\"Compiler requested but failed to import. Make sure bokeh-compiler(-min).js was included.\")\n",
" }\n",
" \n",
" function compile(code) {\n",
" var body = coffee.compile(code, {bare: true, shiftLine: true});\n",
" return new Function(\"require\", \"module\", \"exports\", body);\n",
" }\n",
" \n",
" modules[name] = [compile(module), {}];\n",
" }\n",
" }\n",
" \n",
" for (var name in modules) {\n",
" Bokeh.require.modules[name] = modules[name];\n",
" }\n",
" \n",
" for (var i = 0; i < entry.length; i++) {\n",
" Bokeh.Collections.register_locations(Bokeh.require(entry[i]));\n",
" }\n",
" } else {\n",
" throw new Error(\"Cannot find Bokeh. You have to load it prior to loading plugins.\");\n",
" }\n",
" })({\n",
" \"custom/main\":[function(require,module,exports){\n",
" module.exports = { SnappingTileRenderer: require(\"custom/snapping_tile_renderer\") };\n",
" }, {}],\n",
" \"custom/snapping_tile_renderer\": \"\\n _ = require \\\"underscore\\\"\\n $ = require \\\"jquery\\\"\\n Util = require \\\"util/util\\\"\\n TileRenderer = require \\\"renderer/tile/tile_renderer\\\"\\n class SnappingTileRendererView extends TileRenderer.View\\n type: \\\"SnappingTileRendererView\\\"\\n _set_data: () ->\\n super\\n @plot_view.$el.dblclick(@on_double_click)\\n on_double_click: (e) =>\\n extent = @get_extent()\\n [xmin, ymin, xmax, ymax] = extent\\n \\n x_percent = .5\\n y_percent = .5\\n\\n zoom_level = @mget(\\'tile_source\\').get_closest_level_by_extent(extent, @map_frame.get(\\'height\\'), @map_frame.get(\\'width\\'))\\n old_resolution = @mget(\\'tile_source\\').get_resolution(zoom_level)\\n \\n center_x = xmin + (e.offsetX * old_resolution)\\n center_y = ymax - (e.offsetY * old_resolution)\\n \\n if e.shiftKey\\n zoom_level = zoom_level - 1\\n else\\n zoom_level = zoom_level + 1\\n \\n new_resolution = @mget(\\'tile_source\\').get_resolution(zoom_level)\\n new_xrange = new_resolution * @map_frame.get(\\'width\\')\\n new_yrange = new_resolution * @map_frame.get(\\'height\\')\\n\\n nxmin = center_x - (x_percent * new_xrange)\\n nymin = center_y - (y_percent * new_yrange)\\n nxmax = nxmin + new_xrange\\n nymax = nymin + new_yrange\\n \\n new_extent = @mget(\\'tile_source\\').snap_to_zoom([nxmin, nymin, nxmax, nymax], @map_frame.get(\\'height\\'), @map_frame.get(\\'width\\'), zoom_level)\\n @x_range.set(\\'start\\', new_extent[0])\\n @y_range.set(\\'start\\', new_extent[1])\\n @x_range.set(\\'end\\', new_extent[2])\\n @y_range.set(\\'end\\', new_extent[3])\\n class SnappingTileRenderer extends TileRenderer.Model\\n default_view: SnappingTileRendererView\\n type: \\'SnappingTileRenderer\\'\\n module.exports =\\n Model: SnappingTileRenderer\\n View: SnappingTileRendererView\\n \"\n",
" }, {}, [\"custom/main\"]);\n",
" </script>\n",
" \n",
" <script type=\"text/javascript\">\n",
" Bokeh.$(function() {\n",
" var docs_json = {\"2cee062e-9604-4dee-a008-45983ab381fe\": {\"roots\": {\"root_ids\": [\"01135a38-e4d2-4800-94d8-3169a285b6f9\", \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"], \"references\": [{\"attributes\": {}, \"type\": \"ToolEvents\", \"id\": \"91fcf9ac-db99-4fa6-b57f-4b67f7e03460\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"f906b920-f2f1-4f7c-aabf-db52bc712f41\"}, \"dimension\": 1}, \"type\": \"Grid\", \"id\": \"25558562-9c41-4540-b614-c4748be5bf34\"}, {\"attributes\": {\"min_border_bottom\": 0, \"min_border_right\": 0, \"left\": [{\"type\": \"LinearAxis\", \"id\": \"c465c7cd-fcfb-4b61-bbd6-7eef6ed42154\"}], \"min_border_top\": 0, \"min_border_left\": 0, \"tools\": [{\"type\": \"PanTool\", \"id\": \"7d2dbf37-3e2b-4eb2-a93a-a895390965bd\"}, {\"type\": \"WheelZoomTool\", \"id\": \"b8af7de0-a99b-4093-8c8b-0f64e4eb2c0c\"}], \"below\": [{\"type\": \"LinearAxis\", \"id\": \"52ae02fe-c1e7-459c-acbe-2257372a3fa5\"}], \"renderers\": [{\"type\": \"LinearAxis\", \"id\": \"52ae02fe-c1e7-459c-acbe-2257372a3fa5\"}, {\"type\": \"Grid\", \"id\": \"a7662f22-87aa-4117-aa40-5b9163e4b0b6\"}, {\"type\": \"LinearAxis\", \"id\": \"c465c7cd-fcfb-4b61-bbd6-7eef6ed42154\"}, {\"type\": \"Grid\", \"id\": \"25558562-9c41-4540-b614-c4748be5bf34\"}, {\"type\": \"SnappingTileRenderer\", \"id\": \"8e6263e1-6d59-4d2f-8266-e5b89637b2ec\"}], \"plot_height\": 800, \"tool_events\": {\"type\": \"ToolEvents\", \"id\": \"91fcf9ac-db99-4fa6-b57f-4b67f7e03460\"}, \"y_range\": {\"type\": \"Range1d\", \"id\": \"45075ffa-dc3b-45f4-891a-3301ef4070c7\"}, \"x_range\": {\"type\": \"Range1d\", \"id\": \"4087eaa1-75dc-44d2-8f0a-7d995692ded1\"}, \"plot_width\": 800}, \"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"e756aa21-67d1-416b-babb-4ea5ccd7ecb9\"}, \"formatter\": {\"type\": \"BasicTickFormatter\", \"id\": \"33c0a510-ca70-4463-bafb-50e3e199b632\"}, \"visible\": false}, \"type\": \"LinearAxis\", \"id\": \"52ae02fe-c1e7-459c-acbe-2257372a3fa5\"}, {\"attributes\": {\"min_border_bottom\": 0, \"min_border_right\": 0, \"left\": [{\"type\": \"LinearAxis\", \"id\": \"767962fe-53a4-4c5f-b1ae-eb4f1bbd51e4\"}], \"min_border_top\": 0, \"min_border_left\": 0, \"tools\": [{\"type\": \"PanTool\", \"id\": \"ffe32170-e159-4923-a08d-52422df9e12c\"}, {\"type\": \"WheelZoomTool\", \"id\": \"5e8c0102-28d5-4a79-95f1-fadbb0a72205\"}], \"below\": [{\"type\": \"LinearAxis\", \"id\": \"136ad2d3-86b7-4f9f-be78-a462935c52e0\"}], \"renderers\": [{\"type\": \"LinearAxis\", \"id\": \"136ad2d3-86b7-4f9f-be78-a462935c52e0\"}, {\"type\": \"Grid\", \"id\": \"f6e2e43b-dc85-462d-8072-bb20393bc35d\"}, {\"type\": \"LinearAxis\", \"id\": \"767962fe-53a4-4c5f-b1ae-eb4f1bbd51e4\"}, {\"type\": \"Grid\", \"id\": \"cfe7bd2d-9b22-4bb2-a0a5-c8956edcaeeb\"}, {\"type\": \"SnappingTileRenderer\", \"id\": \"544245e5-ebef-4e05-b8f0-5ae242e0f524\"}], \"plot_height\": 800, \"tool_events\": {\"type\": \"ToolEvents\", \"id\": \"025a9edc-93cc-4a90-97eb-898700cea4a4\"}, \"y_range\": {\"type\": \"Range1d\", \"id\": \"2c297a55-b066-471b-85c8-27ef54766c25\"}, \"x_range\": {\"type\": \"Range1d\", \"id\": \"6431b9d0-dea1-43ce-8f14-79c7d557cc8c\"}, \"plot_width\": 800}, \"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"01135a38-e4d2-4800-94d8-3169a285b6f9\"}, {\"attributes\": {}, \"type\": \"BasicTickFormatter\", \"id\": \"49b45c20-f624-446e-bd5b-66543f4e61db\"}, {\"attributes\": {\"end\": 15000000, \"start\": -15000000, \"callback\": null}, \"type\": \"Range1d\", \"id\": \"4087eaa1-75dc-44d2-8f0a-7d995692ded1\"}, {\"attributes\": {}, \"type\": \"BasicTickFormatter\", \"id\": \"33287e2d-47e3-42e5-ac33-500ac8099617\"}, {\"attributes\": {}, \"type\": \"ToolEvents\", \"id\": \"025a9edc-93cc-4a90-97eb-898700cea4a4\"}, {\"attributes\": {}, \"type\": \"BasicTicker\", \"id\": \"e756aa21-67d1-416b-babb-4ea5ccd7ecb9\"}, {\"attributes\": {\"url\": \"http://tile.stamen.com/toner/{Z}/{X}/{Y}.png\", \"attribution\": \"Map tiles by <a href=\\\"http://stamen.com\\\">Stamen Design</a>, under <a href=\\\"http://creativecommons.org/licenses/by/3.0\\\">CC BY 3.0</a>.Data by <a href=\\\"http://openstreetmap.org\\\">OpenStreetMap</a>, under <a href=\\\"http://www.openstreetmap.org/copyright\\\">ODbL</a>\"}, \"type\": \"WMTSTileSource\", \"id\": \"4b152fed-2b34-4dde-b810-522333e978a1\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"01135a38-e4d2-4800-94d8-3169a285b6f9\"}}, \"type\": \"WheelZoomTool\", \"id\": \"5e8c0102-28d5-4a79-95f1-fadbb0a72205\"}, {\"attributes\": {}, \"type\": \"BasicTickFormatter\", \"id\": \"456e7dea-c653-4270-a22a-84628077c9b4\"}, {\"attributes\": {\"end\": 15000000, \"start\": -15000000, \"callback\": null}, \"type\": \"Range1d\", \"id\": \"45075ffa-dc3b-45f4-891a-3301ef4070c7\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"01135a38-e4d2-4800-94d8-3169a285b6f9\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"06a34338-b714-4bfd-a9cb-58d95c94b6bd\"}, \"formatter\": {\"type\": \"BasicTickFormatter\", \"id\": \"49b45c20-f624-446e-bd5b-66543f4e61db\"}, \"visible\": false}, \"type\": \"LinearAxis\", \"id\": \"767962fe-53a4-4c5f-b1ae-eb4f1bbd51e4\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"}}, \"type\": \"WheelZoomTool\", \"id\": \"b8af7de0-a99b-4093-8c8b-0f64e4eb2c0c\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"f906b920-f2f1-4f7c-aabf-db52bc712f41\"}, \"formatter\": {\"type\": \"BasicTickFormatter\", \"id\": \"33287e2d-47e3-42e5-ac33-500ac8099617\"}, \"visible\": false}, \"type\": \"LinearAxis\", \"id\": \"c465c7cd-fcfb-4b61-bbd6-7eef6ed42154\"}, {\"attributes\": {\"end\": 15000000, \"start\": -15000000, \"callback\": null}, \"type\": \"Range1d\", \"id\": \"2c297a55-b066-471b-85c8-27ef54766c25\"}, {\"attributes\": {\"tile_source\": {\"type\": \"WMTSTileSource\", \"id\": \"4b152fed-2b34-4dde-b810-522333e978a1\"}}, \"type\": \"SnappingTileRenderer\", \"id\": \"544245e5-ebef-4e05-b8f0-5ae242e0f524\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"01135a38-e4d2-4800-94d8-3169a285b6f9\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"51b422b4-43ad-46c2-9bc3-3d807a6d4116\"}, \"formatter\": {\"type\": \"BasicTickFormatter\", \"id\": \"456e7dea-c653-4270-a22a-84628077c9b4\"}, \"visible\": false}, \"type\": \"LinearAxis\", \"id\": \"136ad2d3-86b7-4f9f-be78-a462935c52e0\"}, {\"attributes\": {\"end\": 15000000, \"start\": -15000000, \"callback\": null}, \"type\": \"Range1d\", \"id\": \"6431b9d0-dea1-43ce-8f14-79c7d557cc8c\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"e756aa21-67d1-416b-babb-4ea5ccd7ecb9\"}}, \"type\": \"Grid\", \"id\": \"a7662f22-87aa-4117-aa40-5b9163e4b0b6\"}, {\"attributes\": {\"tile_source\": {\"type\": \"WMTSTileSource\", \"id\": \"4b152fed-2b34-4dde-b810-522333e978a1\"}}, \"type\": \"SnappingTileRenderer\", \"id\": \"8e6263e1-6d59-4d2f-8266-e5b89637b2ec\"}, {\"attributes\": {}, \"type\": \"BasicTickFormatter\", \"id\": \"33c0a510-ca70-4463-bafb-50e3e199b632\"}, {\"attributes\": {}, \"type\": \"BasicTicker\", \"id\": \"f906b920-f2f1-4f7c-aabf-db52bc712f41\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"01135a38-e4d2-4800-94d8-3169a285b6f9\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"06a34338-b714-4bfd-a9cb-58d95c94b6bd\"}, \"dimension\": 1}, \"type\": \"Grid\", \"id\": \"cfe7bd2d-9b22-4bb2-a0a5-c8956edcaeeb\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\"}}, \"type\": \"PanTool\", \"id\": \"7d2dbf37-3e2b-4eb2-a93a-a895390965bd\"}, {\"attributes\": {}, \"type\": \"BasicTicker\", \"id\": \"06a34338-b714-4bfd-a9cb-58d95c94b6bd\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"01135a38-e4d2-4800-94d8-3169a285b6f9\"}}, \"type\": \"PanTool\", \"id\": \"ffe32170-e159-4923-a08d-52422df9e12c\"}, {\"attributes\": {}, \"type\": \"BasicTicker\", \"id\": \"51b422b4-43ad-46c2-9bc3-3d807a6d4116\"}, {\"attributes\": {\"plot\": {\"type\": \"Plot\", \"subtype\": \"Figure\", \"id\": \"01135a38-e4d2-4800-94d8-3169a285b6f9\"}, \"ticker\": {\"type\": \"BasicTicker\", \"id\": \"51b422b4-43ad-46c2-9bc3-3d807a6d4116\"}}, \"type\": \"Grid\", \"id\": \"f6e2e43b-dc85-462d-8072-bb20393bc35d\"}]}, \"title\": \"Bokeh Application\", \"version\": \"0.11.0dev9\"}};\n",
" var render_items = [{\"docid\": \"2cee062e-9604-4dee-a008-45983ab381fe\", \"modelid\": \"4cc0cb53-d44d-4d73-aa30-4500c7f37228\", \"notebook_comms_target\": \"a793527d-a287-4327-b24a-47c31bc94353\", \"elementid\": \"04532d1c-5041-4ccc-847c-08bfe5911fc4\"}];\n",
" \n",
" Bokeh.embed.embed_items(docs_json, render_items);\n",
" });\n",
" </script>\n",
"\n",
" <div class=\"plotdiv\" id=\"04532d1c-5041-4ccc-847c-08bfe5911fc4\"></div>\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<bokeh.io._CommsHandle at 0x77b0eb8>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p = create_plot()\n",
"show(p)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment