We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[BUG] Typed Arrays returned as dicts
Run `examples/howto/events_app.py`. For a lasso selection the `"x"` and `"y"` arrays are returned as dicts:

```
selectiongeometry(geometry={
    "type":"poly",
    "sx":[544,533,531,527,526,526,531,534,545,555,564,570,570],
    "sy":[135,142,145,152,160,165,184,191,201,205,208,210,210],
    "x":{"0":99.67,"1":97.43,"2":97.02,"3":96.21,"4":96,"5":96,"6":97.02,"7":97.63,"8":99.88,"9":101.92,"10":103.75,"11":104.98,"12":104.98},
    "y":{"0":79.95,"1":78.6,"2":78.02,"3":76.68,"4":75.14,"5":74.17,"6":70.51,"7":69.16,"8":67.24,"9":66.47,"10":65.89,"11":65.5,"12":65.5}
}, final=false)
```

Have seen Typed Arrays get represented in this format it other contexts. I would not be surprised to learn that this is a general issue in other places as well. It would be nice to return as "ndarray" types but would also settle for plain lists. 

cc @mattpap 

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `examples/howto/events_app.py`
Content:
```
1 """ Demonstration Bokeh app of how to register event callbacks in both
2 Javascript and Python using an adaptation of the color_scatter example
3 from the bokeh gallery. This example extends the js_events.py example
4 with corresponding Python event callbacks.
5 """
6 
7 import numpy as np
8 
9 from bokeh import events
10 from bokeh.io import curdoc
11 from bokeh.layouts import column, row
12 from bokeh.models import Button, CustomJS, Div
13 from bokeh.plotting import figure
14 
15 
16 def display_event(div, attributes=[]):
17     """
18     Function to build a suitable CustomJS to display the current event
19     in the div model.
20     """
21     style = 'float: left; clear: left; font-size: 13px'
22     return CustomJS(args=dict(div=div), code="""
23         var attrs = %s;
24         var args = [];
25         for (var i = 0; i<attrs.length; i++ ) {
26             var val = JSON.stringify(cb_obj[attrs[i]], function(key, val) {
27                 return val.toFixed ? Number(val.toFixed(2)) : val;
28             })
29             args.push(attrs[i] + '=' + val)
30         }
31         var line = "<span style=%r><b>" + cb_obj.event_name + "</b>(" + args.join(", ") + ")</span>\\n";
32         var text = div.text.concat(line);
33         var lines = text.split("\\n")
34         if (lines.length > 35)
35             lines.shift();
36         div.text = lines.join("\\n");
37     """ % (attributes, style))
38 
39 def print_event(attributes=[]):
40     """
41     Function that returns a Python callback to pretty print the events.
42     """
43     def python_callback(event):
44         cls_name = event.__class__.__name__
45         attrs = ', '.join(['{attr}={val}'.format(attr=attr, val=event.__dict__[attr])
46                        for attr in attributes])
47         print('{cls_name}({attrs})'.format(cls_name=cls_name, attrs=attrs))
48     return python_callback
49 
50 # Follows the color_scatter gallery example
51 
52 N = 4000
53 x = np.random.random(size=N) * 100
54 y = np.random.random(size=N) * 100
55 radii = np.random.random(size=N) * 1.5
56 colors = [
57     "#%02x%02x%02x" % (int(r), int(g), 150) for r, g in zip(50+2*x, 30+2*y)
58 ]
59 
60 p = figure(tools="pan,wheel_zoom,zoom_in,zoom_out,reset,tap,lasso_select,box_select")
61 
62 p.scatter(x, y, radius=radii,
63           fill_color=colors, fill_alpha=0.6,
64           line_color=None)
65 
66 # Add a div to display events and a button to trigger button click events
67 
68 div = Div(width=1000)
69 button = Button(label="Button", button_type="success", width=300)
70 layout = column(button, row(p, div))
71 
72 
73 point_attributes = ['x','y','sx','sy']
74 pan_attributes = point_attributes + ['delta_x', 'delta_y']
75 pinch_attributes = point_attributes + ['scale']
76 wheel_attributes = point_attributes+['delta']
77 
78 ## Register Javascript event callbacks
79 
80 # Button event
81 button.js_on_event(events.ButtonClick, display_event(div))
82 
83 # LOD events
84 p.js_on_event(events.LODStart, display_event(div))
85 p.js_on_event(events.LODEnd,   display_event(div))
86 
87 # Point events
88 
89 p.js_on_event(events.Tap,       display_event(div, attributes=point_attributes))
90 p.js_on_event(events.DoubleTap, display_event(div, attributes=point_attributes))
91 p.js_on_event(events.Press,     display_event(div, attributes=point_attributes))
92 
93 # Mouse wheel event
94 p.js_on_event(events.MouseWheel, display_event(div,attributes=wheel_attributes))
95 
96 # Mouse move, enter and leave
97 p.js_on_event(events.MouseMove,  display_event(div, attributes=point_attributes))
98 p.js_on_event(events.MouseEnter, display_event(div, attributes=point_attributes))
99 p.js_on_event(events.MouseLeave, display_event(div, attributes=point_attributes))
100 
101 # Pan events
102 p.js_on_event(events.Pan,      display_event(div, attributes=pan_attributes))
103 p.js_on_event(events.PanStart, display_event(div, attributes=point_attributes))
104 p.js_on_event(events.PanEnd,   display_event(div, attributes=point_attributes))
105 
106 # Pinch events
107 p.js_on_event(events.Pinch,      display_event(div, attributes=pinch_attributes))
108 p.js_on_event(events.PinchStart, display_event(div, attributes=point_attributes))
109 p.js_on_event(events.PinchEnd,   display_event(div, attributes=point_attributes))
110 
111 # Selection events
112 p.js_on_event(events.SelectionGeometry, display_event(div, attributes=['geometry', 'final']))
113 
114 # Reset events
115 p.js_on_event(events.Reset, display_event(div))
116 
117 
118 ## Register Python event callbacks
119 
120 # Button event
121 button.on_event(events.ButtonClick, print_event())
122 
123 # LOD events
124 p.on_event(events.LODStart, print_event())
125 p.on_event(events.LODEnd,   print_event())
126 
127 # Point events
128 
129 p.on_event(events.Tap,       print_event(attributes=point_attributes))
130 p.on_event(events.DoubleTap, print_event(attributes=point_attributes))
131 p.on_event(events.Press,     print_event(attributes=point_attributes))
132 
133 # Mouse wheel event
134 p.on_event(events.MouseWheel, print_event(attributes=wheel_attributes))
135 
136 # Mouse move, enter and leave
137 p.on_event(events.MouseMove,  print_event(attributes=point_attributes))
138 p.on_event(events.MouseEnter, print_event(attributes=point_attributes))
139 p.on_event(events.MouseLeave, print_event(attributes=point_attributes))
140 
141 # Pan events
142 p.on_event(events.Pan,      print_event(attributes=pan_attributes))
143 p.on_event(events.PanStart, print_event(attributes=point_attributes))
144 p.on_event(events.PanEnd,   print_event(attributes=point_attributes))
145 
146 # Pinch events
147 p.on_event(events.Pinch,      print_event(attributes=pinch_attributes))
148 p.on_event(events.PinchStart, print_event(attributes=point_attributes))
149 p.on_event(events.PinchEnd,   print_event(attributes=point_attributes))
150 
151 # Selection events
152 p.on_event(events.SelectionGeometry, print_event(attributes=['geometry', 'final']))
153 
154 # Reset events
155 p.on_event(events.Reset, print_event())
156 
157 curdoc().add_root(layout)
158
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/examples/howto/events_app.py b/examples/howto/events_app.py
--- a/examples/howto/events_app.py
+++ b/examples/howto/events_app.py
@@ -20,17 +20,16 @@
     """
     style = 'float: left; clear: left; font-size: 13px'
     return CustomJS(args=dict(div=div), code="""
-        var attrs = %s;
-        var args = [];
-        for (var i = 0; i<attrs.length; i++ ) {
-            var val = JSON.stringify(cb_obj[attrs[i]], function(key, val) {
-                return val.toFixed ? Number(val.toFixed(2)) : val;
-            })
+        const {to_string} = Bokeh.require("core/util/pretty")
+        const attrs = %s;
+        const args = [];
+        for (let i = 0; i<attrs.length; i++ ) {
+            const val = to_string(cb_obj[attrs[i]], {precision: 2})
             args.push(attrs[i] + '=' + val)
         }
-        var line = "<span style=%r><b>" + cb_obj.event_name + "</b>(" + args.join(", ") + ")</span>\\n";
-        var text = div.text.concat(line);
-        var lines = text.split("\\n")
+        const line = "<span style=%r><b>" + cb_obj.event_name + "</b>(" + args.join(", ") + ")</span>\\n";
+        const text = div.text.concat(line);
+        const lines = text.split("\\n")
         if (lines.length > 35)
             lines.shift();
         div.text = lines.join("\\n");

{"golden_diff": "diff --git a/examples/howto/events_app.py b/examples/howto/events_app.py\n--- a/examples/howto/events_app.py\n+++ b/examples/howto/events_app.py\n@@ -20,17 +20,16 @@\n     \"\"\"\n     style = 'float: left; clear: left; font-size: 13px'\n     return CustomJS(args=dict(div=div), code=\"\"\"\n-        var attrs = %s;\n-        var args = [];\n-        for (var i = 0; i<attrs.length; i++ ) {\n-            var val = JSON.stringify(cb_obj[attrs[i]], function(key, val) {\n-                return val.toFixed ? Number(val.toFixed(2)) : val;\n-            })\n+        const {to_string} = Bokeh.require(\"core/util/pretty\")\n+        const attrs = %s;\n+        const args = [];\n+        for (let i = 0; i<attrs.length; i++ ) {\n+            const val = to_string(cb_obj[attrs[i]], {precision: 2})\n             args.push(attrs[i] + '=' + val)\n         }\n-        var line = \"<span style=%r><b>\" + cb_obj.event_name + \"</b>(\" + args.join(\", \") + \")</span>\\\\n\";\n-        var text = div.text.concat(line);\n-        var lines = text.split(\"\\\\n\")\n+        const line = \"<span style=%r><b>\" + cb_obj.event_name + \"</b>(\" + args.join(\", \") + \")</span>\\\\n\";\n+        const text = div.text.concat(line);\n+        const lines = text.split(\"\\\\n\")\n         if (lines.length > 35)\n             lines.shift();\n         div.text = lines.join(\"\\\\n\");\n", "issue": "[BUG] Typed Arrays returned as dicts\nRun `examples/howto/events_app.py`. For a lasso selection the `\"x\"` and `\"y\"` arrays are returned as dicts:\r\n\r\n```\r\nselectiongeometry(geometry={\r\n    \"type\":\"poly\",\r\n    \"sx\":[544,533,531,527,526,526,531,534,545,555,564,570,570],\r\n    \"sy\":[135,142,145,152,160,165,184,191,201,205,208,210,210],\r\n    \"x\":{\"0\":99.67,\"1\":97.43,\"2\":97.02,\"3\":96.21,\"4\":96,\"5\":96,\"6\":97.02,\"7\":97.63,\"8\":99.88,\"9\":101.92,\"10\":103.75,\"11\":104.98,\"12\":104.98},\r\n    \"y\":{\"0\":79.95,\"1\":78.6,\"2\":78.02,\"3\":76.68,\"4\":75.14,\"5\":74.17,\"6\":70.51,\"7\":69.16,\"8\":67.24,\"9\":66.47,\"10\":65.89,\"11\":65.5,\"12\":65.5}\r\n}, final=false)\r\n```\r\n\r\nHave seen Typed Arrays get represented in this format it other contexts. I would not be surprised to learn that this is a general issue in other places as well. It would be nice to return as \"ndarray\" types but would also settle for plain lists. \r\n\r\ncc @mattpap \n", "before_files": [{"content": "\"\"\" Demonstration Bokeh app of how to register event callbacks in both\nJavascript and Python using an adaptation of the color_scatter example\nfrom the bokeh gallery. This example extends the js_events.py example\nwith corresponding Python event callbacks.\n\"\"\"\n\nimport numpy as np\n\nfrom bokeh import events\nfrom bokeh.io import curdoc\nfrom bokeh.layouts import column, row\nfrom bokeh.models import Button, CustomJS, Div\nfrom bokeh.plotting import figure\n\n\ndef display_event(div, attributes=[]):\n    \"\"\"\n    Function to build a suitable CustomJS to display the current event\n    in the div model.\n    \"\"\"\n    style = 'float: left; clear: left; font-size: 13px'\n    return CustomJS(args=dict(div=div), code=\"\"\"\n        var attrs = %s;\n        var args = [];\n        for (var i = 0; i<attrs.length; i++ ) {\n            var val = JSON.stringify(cb_obj[attrs[i]], function(key, val) {\n                return val.toFixed ? Number(val.toFixed(2)) : val;\n            })\n            args.push(attrs[i] + '=' + val)\n        }\n        var line = \"<span style=%r><b>\" + cb_obj.event_name + \"</b>(\" + args.join(\", \") + \")</span>\\\\n\";\n        var text = div.text.concat(line);\n        var lines = text.split(\"\\\\n\")\n        if (lines.length > 35)\n            lines.shift();\n        div.text = lines.join(\"\\\\n\");\n    \"\"\" % (attributes, style))\n\ndef print_event(attributes=[]):\n    \"\"\"\n    Function that returns a Python callback to pretty print the events.\n    \"\"\"\n    def python_callback(event):\n        cls_name = event.__class__.__name__\n        attrs = ', '.join(['{attr}={val}'.format(attr=attr, val=event.__dict__[attr])\n                       for attr in attributes])\n        print('{cls_name}({attrs})'.format(cls_name=cls_name, attrs=attrs))\n    return python_callback\n\n# Follows the color_scatter gallery example\n\nN = 4000\nx = np.random.random(size=N) * 100\ny = np.random.random(size=N) * 100\nradii = np.random.random(size=N) * 1.5\ncolors = [\n    \"#%02x%02x%02x\" % (int(r), int(g), 150) for r, g in zip(50+2*x, 30+2*y)\n]\n\np = figure(tools=\"pan,wheel_zoom,zoom_in,zoom_out,reset,tap,lasso_select,box_select\")\n\np.scatter(x, y, radius=radii,\n          fill_color=colors, fill_alpha=0.6,\n          line_color=None)\n\n# Add a div to display events and a button to trigger button click events\n\ndiv = Div(width=1000)\nbutton = Button(label=\"Button\", button_type=\"success\", width=300)\nlayout = column(button, row(p, div))\n\n\npoint_attributes = ['x','y','sx','sy']\npan_attributes = point_attributes + ['delta_x', 'delta_y']\npinch_attributes = point_attributes + ['scale']\nwheel_attributes = point_attributes+['delta']\n\n## Register Javascript event callbacks\n\n# Button event\nbutton.js_on_event(events.ButtonClick, display_event(div))\n\n# LOD events\np.js_on_event(events.LODStart, display_event(div))\np.js_on_event(events.LODEnd,   display_event(div))\n\n# Point events\n\np.js_on_event(events.Tap,       display_event(div, attributes=point_attributes))\np.js_on_event(events.DoubleTap, display_event(div, attributes=point_attributes))\np.js_on_event(events.Press,     display_event(div, attributes=point_attributes))\n\n# Mouse wheel event\np.js_on_event(events.MouseWheel, display_event(div,attributes=wheel_attributes))\n\n# Mouse move, enter and leave\np.js_on_event(events.MouseMove,  display_event(div, attributes=point_attributes))\np.js_on_event(events.MouseEnter, display_event(div, attributes=point_attributes))\np.js_on_event(events.MouseLeave, display_event(div, attributes=point_attributes))\n\n# Pan events\np.js_on_event(events.Pan,      display_event(div, attributes=pan_attributes))\np.js_on_event(events.PanStart, display_event(div, attributes=point_attributes))\np.js_on_event(events.PanEnd,   display_event(div, attributes=point_attributes))\n\n# Pinch events\np.js_on_event(events.Pinch,      display_event(div, attributes=pinch_attributes))\np.js_on_event(events.PinchStart, display_event(div, attributes=point_attributes))\np.js_on_event(events.PinchEnd,   display_event(div, attributes=point_attributes))\n\n# Selection events\np.js_on_event(events.SelectionGeometry, display_event(div, attributes=['geometry', 'final']))\n\n# Reset events\np.js_on_event(events.Reset, display_event(div))\n\n\n## Register Python event callbacks\n\n# Button event\nbutton.on_event(events.ButtonClick, print_event())\n\n# LOD events\np.on_event(events.LODStart, print_event())\np.on_event(events.LODEnd,   print_event())\n\n# Point events\n\np.on_event(events.Tap,       print_event(attributes=point_attributes))\np.on_event(events.DoubleTap, print_event(attributes=point_attributes))\np.on_event(events.Press,     print_event(attributes=point_attributes))\n\n# Mouse wheel event\np.on_event(events.MouseWheel, print_event(attributes=wheel_attributes))\n\n# Mouse move, enter and leave\np.on_event(events.MouseMove,  print_event(attributes=point_attributes))\np.on_event(events.MouseEnter, print_event(attributes=point_attributes))\np.on_event(events.MouseLeave, print_event(attributes=point_attributes))\n\n# Pan events\np.on_event(events.Pan,      print_event(attributes=pan_attributes))\np.on_event(events.PanStart, print_event(attributes=point_attributes))\np.on_event(events.PanEnd,   print_event(attributes=point_attributes))\n\n# Pinch events\np.on_event(events.Pinch,      print_event(attributes=pinch_attributes))\np.on_event(events.PinchStart, print_event(attributes=point_attributes))\np.on_event(events.PinchEnd,   print_event(attributes=point_attributes))\n\n# Selection events\np.on_event(events.SelectionGeometry, print_event(attributes=['geometry', 'final']))\n\n# Reset events\np.on_event(events.Reset, print_event())\n\ncurdoc().add_root(layout)\n", "path": "examples/howto/events_app.py"}], "after_files": [{"content": "\"\"\" Demonstration Bokeh app of how to register event callbacks in both\nJavascript and Python using an adaptation of the color_scatter example\nfrom the bokeh gallery. This example extends the js_events.py example\nwith corresponding Python event callbacks.\n\"\"\"\n\nimport numpy as np\n\nfrom bokeh import events\nfrom bokeh.io import curdoc\nfrom bokeh.layouts import column, row\nfrom bokeh.models import Button, CustomJS, Div\nfrom bokeh.plotting import figure\n\n\ndef display_event(div, attributes=[]):\n    \"\"\"\n    Function to build a suitable CustomJS to display the current event\n    in the div model.\n    \"\"\"\n    style = 'float: left; clear: left; font-size: 13px'\n    return CustomJS(args=dict(div=div), code=\"\"\"\n        const {to_string} = Bokeh.require(\"core/util/pretty\")\n        const attrs = %s;\n        const args = [];\n        for (let i = 0; i<attrs.length; i++ ) {\n            const val = to_string(cb_obj[attrs[i]], {precision: 2})\n            args.push(attrs[i] + '=' + val)\n        }\n        const line = \"<span style=%r><b>\" + cb_obj.event_name + \"</b>(\" + args.join(\", \") + \")</span>\\\\n\";\n        const text = div.text.concat(line);\n        const lines = text.split(\"\\\\n\")\n        if (lines.length > 35)\n            lines.shift();\n        div.text = lines.join(\"\\\\n\");\n    \"\"\" % (attributes, style))\n\ndef print_event(attributes=[]):\n    \"\"\"\n    Function that returns a Python callback to pretty print the events.\n    \"\"\"\n    def python_callback(event):\n        cls_name = event.__class__.__name__\n        attrs = ', '.join(['{attr}={val}'.format(attr=attr, val=event.__dict__[attr])\n                       for attr in attributes])\n        print('{cls_name}({attrs})'.format(cls_name=cls_name, attrs=attrs))\n    return python_callback\n\n# Follows the color_scatter gallery example\n\nN = 4000\nx = np.random.random(size=N) * 100\ny = np.random.random(size=N) * 100\nradii = np.random.random(size=N) * 1.5\ncolors = [\n    \"#%02x%02x%02x\" % (int(r), int(g), 150) for r, g in zip(50+2*x, 30+2*y)\n]\n\np = figure(tools=\"pan,wheel_zoom,zoom_in,zoom_out,reset,tap,lasso_select,box_select\")\n\np.scatter(x, y, radius=radii,\n          fill_color=colors, fill_alpha=0.6,\n          line_color=None)\n\n# Add a div to display events and a button to trigger button click events\n\ndiv = Div(width=1000)\nbutton = Button(label=\"Button\", button_type=\"success\", width=300)\nlayout = column(button, row(p, div))\n\n\npoint_attributes = ['x','y','sx','sy']\npan_attributes = point_attributes + ['delta_x', 'delta_y']\npinch_attributes = point_attributes + ['scale']\nwheel_attributes = point_attributes+['delta']\n\n## Register Javascript event callbacks\n\n# Button event\nbutton.js_on_event(events.ButtonClick, display_event(div))\n\n# LOD events\np.js_on_event(events.LODStart, display_event(div))\np.js_on_event(events.LODEnd,   display_event(div))\n\n# Point events\n\np.js_on_event(events.Tap,       display_event(div, attributes=point_attributes))\np.js_on_event(events.DoubleTap, display_event(div, attributes=point_attributes))\np.js_on_event(events.Press,     display_event(div, attributes=point_attributes))\n\n# Mouse wheel event\np.js_on_event(events.MouseWheel, display_event(div,attributes=wheel_attributes))\n\n# Mouse move, enter and leave\np.js_on_event(events.MouseMove,  display_event(div, attributes=point_attributes))\np.js_on_event(events.MouseEnter, display_event(div, attributes=point_attributes))\np.js_on_event(events.MouseLeave, display_event(div, attributes=point_attributes))\n\n# Pan events\np.js_on_event(events.Pan,      display_event(div, attributes=pan_attributes))\np.js_on_event(events.PanStart, display_event(div, attributes=point_attributes))\np.js_on_event(events.PanEnd,   display_event(div, attributes=point_attributes))\n\n# Pinch events\np.js_on_event(events.Pinch,      display_event(div, attributes=pinch_attributes))\np.js_on_event(events.PinchStart, display_event(div, attributes=point_attributes))\np.js_on_event(events.PinchEnd,   display_event(div, attributes=point_attributes))\n\n# Selection events\np.js_on_event(events.SelectionGeometry, display_event(div, attributes=['geometry', 'final']))\n\n# Reset events\np.js_on_event(events.Reset, display_event(div))\n\n\n## Register Python event callbacks\n\n# Button event\nbutton.on_event(events.ButtonClick, print_event())\n\n# LOD events\np.on_event(events.LODStart, print_event())\np.on_event(events.LODEnd,   print_event())\n\n# Point events\n\np.on_event(events.Tap,       print_event(attributes=point_attributes))\np.on_event(events.DoubleTap, print_event(attributes=point_attributes))\np.on_event(events.Press,     print_event(attributes=point_attributes))\n\n# Mouse wheel event\np.on_event(events.MouseWheel, print_event(attributes=wheel_attributes))\n\n# Mouse move, enter and leave\np.on_event(events.MouseMove,  print_event(attributes=point_attributes))\np.on_event(events.MouseEnter, print_event(attributes=point_attributes))\np.on_event(events.MouseLeave, print_event(attributes=point_attributes))\n\n# Pan events\np.on_event(events.Pan,      print_event(attributes=pan_attributes))\np.on_event(events.PanStart, print_event(attributes=point_attributes))\np.on_event(events.PanEnd,   print_event(attributes=point_attributes))\n\n# Pinch events\np.on_event(events.Pinch,      print_event(attributes=pinch_attributes))\np.on_event(events.PinchStart, print_event(attributes=point_attributes))\np.on_event(events.PinchEnd,   print_event(attributes=point_attributes))\n\n# Selection events\np.on_event(events.SelectionGeometry, print_event(attributes=['geometry', 'final']))\n\n# Reset events\np.on_event(events.Reset, print_event())\n\ncurdoc().add_root(layout)\n", "path": "examples/howto/events_app.py"}]}