Skip to content

Instantly share code, notes, and snippets.

@karkir0003
Last active December 30, 2020 17:44
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 karkir0003/b74d5edf65794d7c8f343a1bdba7ae25 to your computer and use it in GitHub Desktop.
Save karkir0003/b74d5edf65794d7c8f343a1bdba7ae25 to your computer and use it in GitHub Desktop.
PiApproxMonteCarloRevisedForBokeh
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "PiApproxMonteCarlo.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"widgets": {
"application/vnd.jupyter.widget-state+json": {
"9774d4d3fa694eefa1f47ea14aa2c564": {
"model_module": "@jupyter-widgets/controls",
"model_name": "VBoxModel",
"state": {
"_view_name": "VBoxView",
"_dom_classes": [
"widget-interact"
],
"_model_name": "VBoxModel",
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.5.0",
"box_style": "",
"layout": "IPY_MODEL_088133e77e824abfa07e3aa46a80a595",
"_model_module": "@jupyter-widgets/controls",
"children": [
"IPY_MODEL_c199a58bbab7411abd1bb11caa550cce",
"IPY_MODEL_8b0b942bbf924af6964accb86b784662"
]
}
},
"088133e77e824abfa07e3aa46a80a595": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"c199a58bbab7411abd1bb11caa550cce": {
"model_module": "@jupyter-widgets/controls",
"model_name": "IntSliderModel",
"state": {
"_view_name": "IntSliderView",
"style": "IPY_MODEL_246a0f460c564d288971f5b597e98677",
"_dom_classes": [],
"description": "i",
"step": 1,
"_model_name": "IntSliderModel",
"orientation": "horizontal",
"max": 10000,
"_view_module": "@jupyter-widgets/controls",
"_model_module_version": "1.5.0",
"value": 10,
"_view_count": null,
"disabled": false,
"_view_module_version": "1.5.0",
"min": 0,
"continuous_update": true,
"readout_format": "d",
"description_tooltip": null,
"readout": true,
"_model_module": "@jupyter-widgets/controls",
"layout": "IPY_MODEL_37ca8b27eda143808cf6dbaa89e45f0f"
}
},
"8b0b942bbf924af6964accb86b784662": {
"model_module": "@jupyter-widgets/output",
"model_name": "OutputModel",
"state": {
"_view_name": "OutputView",
"msg_id": "",
"_dom_classes": [],
"_model_name": "OutputModel",
"outputs": [
{
"output_type": "display_data",
"metadata": {
"tags": [],
"needs_background": "light"
},
"image/png": "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\n",
"text/plain": "<Figure size 576x288 with 2 Axes>"
}
],
"_view_module": "@jupyter-widgets/output",
"_model_module_version": "1.0.0",
"_view_count": null,
"_view_module_version": "1.0.0",
"layout": "IPY_MODEL_56439eb2305a4eb394efc739a0b75d70",
"_model_module": "@jupyter-widgets/output"
}
},
"246a0f460c564d288971f5b597e98677": {
"model_module": "@jupyter-widgets/controls",
"model_name": "SliderStyleModel",
"state": {
"_view_name": "StyleView",
"handle_color": null,
"_model_name": "SliderStyleModel",
"description_width": "",
"_view_module": "@jupyter-widgets/base",
"_model_module_version": "1.5.0",
"_view_count": null,
"_view_module_version": "1.2.0",
"_model_module": "@jupyter-widgets/controls"
}
},
"37ca8b27eda143808cf6dbaa89e45f0f": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
},
"56439eb2305a4eb394efc739a0b75d70": {
"model_module": "@jupyter-widgets/base",
"model_name": "LayoutModel",
"state": {
"_view_name": "LayoutView",
"grid_template_rows": null,
"right": null,
"justify_content": null,
"_view_module": "@jupyter-widgets/base",
"overflow": null,
"_model_module_version": "1.2.0",
"_view_count": null,
"flex_flow": null,
"width": null,
"min_width": null,
"border": null,
"align_items": null,
"bottom": null,
"_model_module": "@jupyter-widgets/base",
"top": null,
"grid_column": null,
"overflow_y": null,
"overflow_x": null,
"grid_auto_flow": null,
"grid_area": null,
"grid_template_columns": null,
"flex": null,
"_model_name": "LayoutModel",
"justify_items": null,
"grid_row": null,
"max_height": null,
"align_content": null,
"visibility": null,
"align_self": null,
"height": null,
"min_height": null,
"padding": null,
"grid_auto_rows": null,
"grid_gap": null,
"max_width": null,
"order": null,
"_view_module_version": "1.2.0",
"grid_template_areas": null,
"object_position": null,
"object_fit": null,
"grid_auto_columns": null,
"margin": null,
"display": null,
"left": null
}
}
}
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "fZIEdp5jPBal"
},
"source": [
"#Monte Carlo Method to Approximate Pi\r\n",
"##By Karthik Subramanian and Valentin Stelea\r\n",
"\r\n",
"This notebook takes you through the process of using repeated random sampling to approximate $\\pi$. The user is able to play around with the interactive plots and test out different parameters to gain an understanding of how this method can be used to approximate $\\pi$."
]
},
{
"cell_type": "code",
"metadata": {
"id": "ahD1OVUJS7WL"
},
"source": [
"#function that uses unit square with a circle of radius 0.5 inside\r\n",
"def getPiApproximationMonteCarlo(N_samples):\r\n",
" x = np.random.uniform(0,1,N_samples)\r\n",
" y = np.random.uniform(0,1,N_samples)\r\n",
" # check if in circle\r\n",
" check = ((x-0.5)**2+(y-0.5)**2 <=1/4).astype(int)\r\n",
" freq = np.sum(check)/N_samples\r\n",
" return freq*4"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 362,
"referenced_widgets": [
"9774d4d3fa694eefa1f47ea14aa2c564",
"088133e77e824abfa07e3aa46a80a595",
"c199a58bbab7411abd1bb11caa550cce",
"8b0b942bbf924af6964accb86b784662",
"246a0f460c564d288971f5b597e98677",
"37ca8b27eda143808cf6dbaa89e45f0f",
"56439eb2305a4eb394efc739a0b75d70"
]
},
"id": "KezCEp_WO-Gk",
"outputId": "3c1fcdc0-9fad-4830-9b1a-7c7c7be5e560"
},
"source": [
"\"\"\"\r\n",
"Interactive widget that allows the user to adjust the sample size to see how the value of the approximated pi changes\r\n",
"\"\"\"\r\n",
"\r\n",
"# nbi:hide_in\r\n",
"import matplotlib.pyplot as plt\r\n",
"import numpy as np\r\n",
"from ipywidgets import interact\r\n",
"import math\r\n",
"\r\n",
"plt.rcParams[\"figure.figsize\"] = (8, 4)\r\n",
"\r\n",
"# generate data\r\n",
"N_samples = 10000\r\n",
"x = np.random.uniform(0, 1, N_samples)\r\n",
"y = np.random.uniform(0, 1, N_samples)\r\n",
"\r\n",
"# check if in circle\r\n",
"check = ((x-0.5)**2+(y-0.5)**2 <=1/4).astype(int)\r\n",
"piVals = np.array([ getPiApproximationMonteCarlo(i) for i in range(N_samples) ])\r\n",
"\r\n",
"# ploting results\r\n",
"def draw(i=10):\r\n",
" fig, [ax1, ax2] = plt.subplots(1,2, num=1, clear=True)\r\n",
" draw_circle = plt.Circle((0.5, 0.5), 0.5, facecolor='red')\r\n",
" draw_square = plt.Rectangle((0, 0), width=1, height=1, fill=False, zorder=1)\r\n",
" ax1.add_artist(draw_circle)\r\n",
" ax1.add_artist(draw_square)\r\n",
" ax1.set_xlim(-0.1, 1.1)\r\n",
" ax1.set_ylim(-0.1, 1.1)\r\n",
" ax1.set_axis_on()\r\n",
" ax1.title.set_text('Unit Square with circle of radius 0.5')\r\n",
" ax1.scatter(x[:i], y[:i], marker=\"x\", zorder=2)\r\n",
" \r\n",
" prob = np.pi/(4*4)\r\n",
" tosses = np.arange(i)\r\n",
" ax2.scatter(tosses, piVals[:i])\r\n",
" ax2.set_xlabel('sample size')\r\n",
" ax2.set_ylabel('value of pi')\r\n",
" ax2.plot([0,N_samples], [math.pi,math.pi], 'r')\r\n",
" plt.tight_layout()\r\n",
" plt.show()\r\n",
"\r\n",
"interact(draw, i=(0,N_samples, 1));"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:7: RuntimeWarning: invalid value encountered in long_scalars\n",
" import sys\n"
],
"name": "stderr"
},
{
"output_type": "display_data",
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9774d4d3fa694eefa1f47ea14aa2c564",
"version_minor": 0,
"version_major": 2
},
"text/plain": [
"interactive(children=(IntSlider(value=10, description='i', max=10000), Output()), _dom_classes=('widget-intera…"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mfC1-d84tXxe"
},
"source": [
"Bokeh Distribution Plot for Pi Approximation. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "TYDTFBjCty_b"
},
"source": [
"import pandas as pd\r\n",
"from bokeh.plotting import figure, show\r\n",
"from bokeh.io import output_notebook\r\n",
"from bokeh.models import ColumnDataSource, HoverTool\r\n",
"def generateDataFrame(num_iterations, sample_size):\r\n",
" pi_samples = [getPiApproximationMonteCarlo(sample_size) for i in range(num_iterations)] #100 samples\r\n",
" pi_samples = sorted(pi_samples, reverse=False)\r\n",
" countDict = {}\r\n",
" for element in pi_samples:\r\n",
" # checking whether it is in the dict or not\r\n",
" if element in countDict:\r\n",
" # incerementing the count by 1\r\n",
" countDict[element] += 1\r\n",
" else:\r\n",
" # setting the count to 1\r\n",
" countDict[element] = 1\r\n",
" pi_frame = pd.DataFrame.from_dict({'pi-value': countDict.keys(), 'count': countDict.values()})\r\n",
" pi_frame[\"adjusted\"] = pi_frame['pi-value'] + 0.001\r\n",
" return pi_frame\r\n",
"\r\n",
"\r\n",
"def bokehPlot(pi_frame):\r\n",
" # Convert dataframe to column data source\r\n",
" src = ColumnDataSource(pi_frame)\r\n",
" # Create the blank plot\r\n",
" p = figure(plot_height = 600, plot_width = 600, \r\n",
" title = 'Histogram of Values of Pi from Simulation',\r\n",
" x_axis_label = 'Values of Pi from Apporximation', \r\n",
" y_axis_label = 'Counts')\r\n",
"\r\n",
" # Add a quad glyph\r\n",
" p.quad(source=src, bottom=0, top='count',\r\n",
" left='pi-value', right='adjusted', \r\n",
" fill_color='red', line_color='black')\r\n",
" # Hover tool referring to our own data field using @ and\r\n",
" # a position on the graph using $\r\n",
" h = HoverTool(tooltips = [('Pi Value', '@{pi-value}'),\r\n",
" ('Count', '@count')])\r\n",
" p.add_tools(h)\r\n",
"\r\n",
" \r\n",
" # Show the plot\r\n",
" show(p)\r\n",
"\r\n",
"\r\n",
"def runMonteCarlo(num_iterations, sample_size):\r\n",
" df = generateDataFrame(num_iterations, sample_size)\r\n",
" bokehPlot(df)"
],
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "6EsFBhnEjInc"
},
"source": [
"output_notebook()"
],
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 650
},
"id": "lsrprI50u4Hk",
"outputId": "fd93dfb2-b385-416e-88a8-6c6b401bbd16"
},
"source": [
"sample_size = int(input(\"How many elements would you like to sample?\"))\r\n",
"\r\n",
"num_iterations = int(input(\"How many times would you like to sample?\"))\r\n",
"\r\n",
"runMonteCarlo(num_iterations, sample_size)\r\n"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"How many elements would you like to sample?1000\n",
"How many times would you like to sample?1000\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"application/javascript": [
"\n",
"(function(root) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
"\n",
" var force = true;\n",
"\n",
" if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
" root._bokeh_onload_callbacks = [];\n",
" root._bokeh_is_loading = undefined;\n",
" }\n",
"\n",
" var JS_MIME_TYPE = 'application/javascript';\n",
" var HTML_MIME_TYPE = 'text/html';\n",
" var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n",
" var CLASS_NAME = 'output_bokeh rendered_html';\n",
"\n",
" /**\n",
" * Render data to the DOM node\n",
" */\n",
" function render(props, node) {\n",
" var script = document.createElement(\"script\");\n",
" node.appendChild(script);\n",
" }\n",
"\n",
" /**\n",
" * Handle when an output is cleared or removed\n",
" */\n",
" function handleClearOutput(event, handle) {\n",
" var cell = handle.cell;\n",
"\n",
" var id = cell.output_area._bokeh_element_id;\n",
" var server_id = cell.output_area._bokeh_server_id;\n",
" // Clean up Bokeh references\n",
" if (id != null && id in Bokeh.index) {\n",
" Bokeh.index[id].model.document.clear();\n",
" delete Bokeh.index[id];\n",
" }\n",
"\n",
" if (server_id !== undefined) {\n",
" // Clean up Bokeh references\n",
" var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n",
" cell.notebook.kernel.execute(cmd, {\n",
" iopub: {\n",
" output: function(msg) {\n",
" var id = msg.content.text.trim();\n",
" if (id in Bokeh.index) {\n",
" Bokeh.index[id].model.document.clear();\n",
" delete Bokeh.index[id];\n",
" }\n",
" }\n",
" }\n",
" });\n",
" // Destroy server and session\n",
" var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n",
" cell.notebook.kernel.execute(cmd);\n",
" }\n",
" }\n",
"\n",
" /**\n",
" * Handle when a new output is added\n",
" */\n",
" function handleAddOutput(event, handle) {\n",
" var output_area = handle.output_area;\n",
" var output = handle.output;\n",
"\n",
" // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n",
" if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n",
" return\n",
" }\n",
"\n",
" var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
"\n",
" if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n",
" toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n",
" // store reference to embed id on output_area\n",
" output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
" }\n",
" if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
" var bk_div = document.createElement(\"div\");\n",
" bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
" var script_attrs = bk_div.children[0].attributes;\n",
" for (var i = 0; i < script_attrs.length; i++) {\n",
" toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
" toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n",
" }\n",
" // store reference to server id on output_area\n",
" output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
" }\n",
" }\n",
"\n",
" function register_renderer(events, OutputArea) {\n",
"\n",
" function append_mime(data, metadata, element) {\n",
" // create a DOM node to render to\n",
" var toinsert = this.create_output_subarea(\n",
" metadata,\n",
" CLASS_NAME,\n",
" EXEC_MIME_TYPE\n",
" );\n",
" this.keyboard_manager.register_events(toinsert);\n",
" // Render to node\n",
" var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
" render(props, toinsert[toinsert.length - 1]);\n",
" element.append(toinsert);\n",
" return toinsert\n",
" }\n",
"\n",
" /* Handle when an output is cleared or removed */\n",
" events.on('clear_output.CodeCell', handleClearOutput);\n",
" events.on('delete.Cell', handleClearOutput);\n",
"\n",
" /* Handle when a new output is added */\n",
" events.on('output_added.OutputArea', handleAddOutput);\n",
"\n",
" /**\n",
" * Register the mime type and append_mime function with output_area\n",
" */\n",
" OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
" /* Is output safe? */\n",
" safe: true,\n",
" /* Index of renderer in `output_area.display_order` */\n",
" index: 0\n",
" });\n",
" }\n",
"\n",
" // register the mime type if in Jupyter Notebook environment and previously unregistered\n",
" if (root.Jupyter !== undefined) {\n",
" var events = require('base/js/events');\n",
" var OutputArea = require('notebook/js/outputarea').OutputArea;\n",
"\n",
" if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
" register_renderer(events, OutputArea);\n",
" }\n",
" }\n",
"\n",
" \n",
" if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
" root._bokeh_timeout = Date.now() + 5000;\n",
" root._bokeh_failed_load = false;\n",
" }\n",
"\n",
" var NB_LOAD_WARNING = {'data': {'text/html':\n",
" \"<div style='background-color: #fdd'>\\n\"+\n",
" \"<p>\\n\"+\n",
" \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n",
" \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n",
" \"</p>\\n\"+\n",
" \"<ul>\\n\"+\n",
" \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n",
" \"<li>use INLINE resources instead, as so:</li>\\n\"+\n",
" \"</ul>\\n\"+\n",
" \"<code>\\n\"+\n",
" \"from bokeh.resources import INLINE\\n\"+\n",
" \"output_notebook(resources=INLINE)\\n\"+\n",
" \"</code>\\n\"+\n",
" \"</div>\"}};\n",
"\n",
" function display_loaded() {\n",
" var el = document.getElementById(null);\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS is loading...\";\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" if (el != null) {\n",
" el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n",
" }\n",
" } else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(display_loaded, 100)\n",
" }\n",
" }\n",
"\n",
"\n",
" function run_callbacks() {\n",
" try {\n",
" root._bokeh_onload_callbacks.forEach(function(callback) {\n",
" if (callback != null)\n",
" callback();\n",
" });\n",
" } finally {\n",
" delete root._bokeh_onload_callbacks\n",
" }\n",
" console.debug(\"Bokeh: all callbacks have finished\");\n",
" }\n",
"\n",
" function load_libs(css_urls, js_urls, callback) {\n",
" if (css_urls == null) css_urls = [];\n",
" if (js_urls == null) js_urls = [];\n",
"\n",
" root._bokeh_onload_callbacks.push(callback);\n",
" if (root._bokeh_is_loading > 0) {\n",
" console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
" return null;\n",
" }\n",
" if (js_urls == null || js_urls.length === 0) {\n",
" run_callbacks();\n",
" return null;\n",
" }\n",
" console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
" root._bokeh_is_loading = css_urls.length + js_urls.length;\n",
"\n",
" function on_load() {\n",
" root._bokeh_is_loading--;\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
" run_callbacks()\n",
" }\n",
" }\n",
"\n",
" function on_error() {\n",
" console.error(\"failed to load \" + url);\n",
" }\n",
"\n",
" for (var i = 0; i < css_urls.length; i++) {\n",
" var url = css_urls[i];\n",
" const element = document.createElement(\"link\");\n",
" element.onload = on_load;\n",
" element.onerror = on_error;\n",
" element.rel = \"stylesheet\";\n",
" element.type = \"text/css\";\n",
" element.href = url;\n",
" console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\": \"kLr4fYcqcSpbuI95brIH3vnnYCquzzSxHPU6XGQCIkQRGJwhg0StNbj1eegrHs12\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\": \"xIGPmVtaOm+z0BqfSOMn4lOR6ciex448GIKG4eE61LsAvmGj48XcMQZtKcE/UXZe\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\": \"Dc9u1wF/0zApGIWoBbH77iWEHtdmkuYWG839Uzmv8y8yBLXebjO9ZnERsde5Ln/P\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\": \"cT9JaBz7GiRXdENrJLZNSC6eMNF3nh3fa5fTF51Svp+ukxPdwcU5kGXGPBgDCa2j\"};\n",
"\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" var element = document.createElement('script');\n",
" element.onload = on_load;\n",
" element.onerror = on_error;\n",
" element.async = false;\n",
" element.src = url;\n",
" if (url in hashes) {\n",
" element.crossOrigin = \"anonymous\";\n",
" element.integrity = \"sha384-\" + hashes[url];\n",
" }\n",
" console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.head.appendChild(element);\n",
" }\n",
" };\n",
"\n",
" function inject_raw_css(css) {\n",
" const element = document.createElement(\"style\");\n",
" element.appendChild(document.createTextNode(css));\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" \n",
" var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\"];\n",
" var css_urls = [];\n",
" \n",
"\n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" Bokeh.set_log_level(\"info\");\n",
" },\n",
" function(Bokeh) {\n",
" \n",
" \n",
" }\n",
" ];\n",
"\n",
" function run_inline_js() {\n",
" \n",
" if (root.Bokeh !== undefined || force === true) {\n",
" \n",
" for (var i = 0; i < inline_js.length; i++) {\n",
" inline_js[i].call(root, root.Bokeh);\n",
" }\n",
" } else if (Date.now() < root._bokeh_timeout) {\n",
" setTimeout(run_inline_js, 100);\n",
" } else if (!root._bokeh_failed_load) {\n",
" console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
" root._bokeh_failed_load = true;\n",
" } else if (force !== true) {\n",
" var cell = $(document.getElementById(null)).parents('.cell').data().cell;\n",
" cell.output_area.append_execute_result(NB_LOAD_WARNING)\n",
" }\n",
"\n",
" }\n",
"\n",
" if (root._bokeh_is_loading === 0) {\n",
" console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
" run_inline_js();\n",
" } else {\n",
" load_libs(css_urls, js_urls, function() {\n",
" console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
" run_inline_js();\n",
" });\n",
" }\n",
"}(window));"
],
"application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n var el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\": \"kLr4fYcqcSpbuI95brIH3vnnYCquzzSxHPU6XGQCIkQRGJwhg0StNbj1eegrHs12\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\": \"xIGPmVtaOm+z0BqfSOMn4lOR6ciex448GIKG4eE61LsAvmGj48XcMQZtKcE/UXZe\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\": \"Dc9u1wF/0zApGIWoBbH77iWEHtdmkuYWG839Uzmv8y8yBLXebjO9ZnERsde5Ln/P\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\": \"cT9JaBz7GiRXdENrJLZNSC6eMNF3nh3fa5fTF51Svp+ukxPdwcU5kGXGPBgDCa2j\"};\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n if (url in hashes) {\n element.crossOrigin = \"anonymous\";\n element.integrity = \"sha384-\" + hashes[url];\n }\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\"];\n var css_urls = [];\n \n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
},
"metadata": {
"tags": []
}
},
{
"output_type": "display_data",
"data": {
"text/html": [
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
" <div class=\"bk-root\" id=\"76e67998-00ad-4f14-8651-b257be7eb6f4\" data-root-id=\"1002\"></div>\n"
]
},
"metadata": {
"tags": []
}
},
{
"output_type": "display_data",
"data": {
"application/javascript": [
"(function(root) {\n",
" function embed_document(root) {\n",
" \n",
" var docs_json = {\"f3dad1bd-0608-4eab-bf5b-ae77512c2913\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1013\"}],\"center\":[{\"id\":\"1016\"},{\"id\":\"1020\"}],\"left\":[{\"id\":\"1017\"}],\"renderers\":[{\"id\":\"1038\"}],\"title\":{\"id\":\"1003\"},\"toolbar\":{\"id\":\"1028\"},\"x_range\":{\"id\":\"1005\"},\"x_scale\":{\"id\":\"1009\"},\"y_range\":{\"id\":\"1007\"},\"y_scale\":{\"id\":\"1011\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"adjusted\":{\"__ndarray__\":\"46WbxCCwB0C4HoXrUbgHQAwCK4cW2QdAtvP91HjpB0Bg5dAi2/kHQDVeukkMAghA30+Nl24SCEC0yHa+nxoIQIlBYOXQIghAXrpJDAIrCEAzMzMzMzMIQAisHFpkOwhA3SQGgZVDCECyne+nxksIQIcW2c73UwhAXI/C9ShcCEAxCKwcWmQIQAaBlUOLbAhA2/l+arx0CECwcmiR7XwIQIXrUbgehQhAWmQ730+NCEAv3SQGgZUIQARWDi2ynQhA2c73U+OlCECuR+F6FK4IQIPAyqFFtghAWDm0yHa+CEAtsp3vp8YIQAIrhxbZzghA16NwPQrXCECsHFpkO98IQIGVQ4ts5whAVg4tsp3vCEArhxbZzvcIQAAAAAAAAAlA1XjpJjEICUCq8dJNYhAJQH9qvHSTGAlAVOOlm8QgCUApXI/C9SgJQP7UeOkmMQlA001iEFg5CUCoxks3iUEJQH0/NV66SQlAUrgehetRCUAnMQisHFoJQPyp8dJNYglA0SLb+X5qCUCmm8QgsHIJQHsUrkfheglAUI2XbhKDCUAlBoGVQ4sJQPp+arx0kwlAz/dT46WbCUCkcD0K16MJQHnpJjEIrAlATmIQWDm0CUAj2/l+arwJQPhT46WbxAlAzczMzMzMCUCiRbbz/dQJQHe+nxov3QlATDeJQWDlCUAhsHJoke0JQPYoXI/C9QlAy6FFtvP9CUCfGi/dJAYKQHSTGARWDgpASQwCK4cWCkDz/dR46SYKQMh2vp8aLwpAHFpkO99PCkDGSzeJQWAKQJvEILByaApAGARWDi2yCkA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[76]},\"count\":[1,1,1,1,1,2,1,1,1,1,4,3,3,5,4,6,6,5,10,8,14,9,11,15,14,16,30,27,18,17,20,29,32,27,35,29,31,30,36,28,32,33,20,24,24,35,28,22,19,18,21,21,23,16,16,13,13,11,12,11,12,7,3,6,5,5,3,1,3,3,2,1,1,1,1,1],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75],\"pi-value\":{\"__ndarray__\":\"rkfhehSuB0CDwMqhRbYHQNejcD0K1wdAgZVDi2znB0ArhxbZzvcHQAAAAAAAAAhAqvHSTWIQCEB/arx0kxgIQFTjpZvEIAhAKVyPwvUoCED+1HjpJjEIQNNNYhBYOQhAqMZLN4lBCEB9PzVeukkIQFK4HoXrUQhAJzEIrBxaCED8qfHSTWIIQNEi2/l+aghAppvEILByCEB7FK5H4XoIQFCNl24SgwhAJQaBlUOLCED6fmq8dJMIQM/3U+OlmwhApHA9CtejCEB56SYxCKwIQE5iEFg5tAhAI9v5fmq8CED4U+Olm8QIQM3MzMzMzAhAokW28/3UCEB3vp8aL90IQEw3iUFg5QhAIbByaJHtCED2KFyPwvUIQMuhRbbz/QhAoBov3SQGCUB1kxgEVg4JQEoMAiuHFglAH4XrUbgeCUD0/dR46SYJQMl2vp8aLwlAnu+nxks3CUBzaJHtfD8JQEjhehSuRwlAHVpkO99PCUDy0k1iEFgJQMdLN4lBYAlAnMQgsHJoCUBxPQrXo3AJQEa28/3UeAlAGy/dJAaBCUDwp8ZLN4kJQMUgsHJokQlAmpmZmZmZCUBvEoPAyqEJQESLbOf7qQlAGQRWDi2yCUDufD81XroJQMP1KFyPwglAmG4Sg8DKCUBt5/up8dIJQEJg5dAi2wlAF9nO91PjCUDsUbgehesJQMHKoUW28wlAlkOLbOf7CUBqvHSTGAQKQD81XrpJDApAFK5H4XoUCkC+nxov3SQKQJMYBFYOLQpA5/up8dJNCkCR7Xw/NV4KQGZmZmZmZgpA46WbxCCwCkA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[76]}},\"selected\":{\"id\":\"1048\"},\"selection_policy\":{\"id\":\"1049\"}},\"id\":\"1001\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1001\"}},\"id\":\"1039\",\"type\":\"CDSView\"},{\"attributes\":{\"axis_label\":\"Values of Pi from Apporximation\",\"formatter\":{\"id\":\"1045\"},\"ticker\":{\"id\":\"1014\"}},\"id\":\"1013\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1043\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"DataRange1d\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"red\"},\"left\":{\"field\":\"pi-value\"},\"line_alpha\":{\"value\":0.1},\"right\":{\"field\":\"adjusted\"},\"top\":{\"field\":\"count\"}},\"id\":\"1037\",\"type\":\"Quad\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1027\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"},{\"id\":\"1026\"},{\"id\":\"1040\"}]},\"id\":\"1028\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1013\"},\"ticker\":null},\"id\":\"1016\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"Counts\",\"formatter\":{\"id\":\"1043\"},\"ticker\":{\"id\":\"1018\"}},\"id\":\"1017\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"Pi Value\",\"@{pi-value}\"],[\"Count\",\"@count\"]]},\"id\":\"1040\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1018\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1017\"},\"dimension\":1,\"ticker\":null},\"id\":\"1020\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"1001\"},\"glyph\":{\"id\":\"1036\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1037\"},\"selection_glyph\":null,\"view\":{\"id\":\"1039\"}},\"id\":\"1038\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1011\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"text\":\"Histogram of Values of Pi from Simulation\"},\"id\":\"1003\",\"type\":\"Title\"},{\"attributes\":{\"overlay\":{\"id\":\"1027\"}},\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"ResetTool\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"red\"},\"left\":{\"field\":\"pi-value\"},\"right\":{\"field\":\"adjusted\"},\"top\":{\"field\":\"count\"}},\"id\":\"1036\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"HelpTool\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"2.1.1\"}};\n",
" var render_items = [{\"docid\":\"f3dad1bd-0608-4eab-bf5b-ae77512c2913\",\"root_ids\":[\"1002\"],\"roots\":{\"1002\":\"76e67998-00ad-4f14-8651-b257be7eb6f4\"}}];\n",
" root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
"\n",
" }\n",
" if (root.Bokeh !== undefined) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (root.Bokeh !== undefined) {\n",
" clearInterval(timer);\n",
" embed_document(root);\n",
" } else {\n",
" attempts++;\n",
" if (attempts > 100) {\n",
" clearInterval(timer);\n",
" console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n",
" }\n",
" }\n",
" }, 10, root)\n",
" }\n",
"})(window);"
],
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"tags": [],
"application/vnd.bokehjs_exec.v0+json": {
"id": "1002"
}
}
}
]
}
]
}
# Automatically generated by https://github.com/damnever/pigar.
# C:\Users\karki\OneDrive\Desktop\pi approx monte carlo\PiApproxMonteCarlo (2).ipynb: 56
bokeh == 1.3.4
# C:\Users\karki\OneDrive\Desktop\pi approx monte carlo\PiApproxMonteCarlo (2).ipynb: 16
ipywidgets == 7.5.1
# C:\Users\karki\OneDrive\Desktop\pi approx monte carlo\PiApproxMonteCarlo (2).ipynb: 14
matplotlib == 3.1.1
# C:\Users\karki\OneDrive\Desktop\pi approx monte carlo\PiApproxMonteCarlo (2).ipynb: 15
numpy == 1.16.5
# C:\Users\karki\OneDrive\Desktop\pi approx monte carlo\PiApproxMonteCarlo (2).ipynb: 53
pandas == 0.25.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment