# Buggy code
def _update_datasource(self, source, data):
    """
    Update datasource with data for a new frame.
    """
    if isinstance(source, ColumnDataSource):
        if self.handles["static_source"]:
            source.trigger("data")
        else:
            source.data.update(data)
    else:
        source.graph_layout = data


# Traceback (TypeError)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~/anaconda3/lib/python3.6/site-packages/IPython/core/formatters.py in __call__(self, obj, include, exclude)
968
969             if method is not None:
--> 970                 return method(include=include, exclude=exclude)
971             return None
972         else:

~/anaconda3/lib/python3.6/site-packages/holoviews/core/dimension.py in _repr_mimebundle_(self, include, exclude)
1263         combined and returned.
1264         """
-> 1265         return Store.render(self)
1266
1267

~/anaconda3/lib/python3.6/site-packages/holoviews/core/options.py in render(cls, obj)
1287         data, metadata = {}, {}
1288         for hook in hooks:
-> 1289             ret = hook(obj)
1290             if ret is None:
1291                 continue

~/anaconda3/lib/python3.6/site-packages/holoviews/ipython/display_hooks.py in pprint_display(obj)
270     if not ip.display_formatter.formatters['text/plain'].pprint:
271         return None
--> 272     return display(obj, raw_output=True)
273
274

~/anaconda3/lib/python3.6/site-packages/holoviews/ipython/display_hooks.py in display(obj, raw_output, **kwargs)
246     elif isinstance(obj, (HoloMap, DynamicMap)):
247         with option_state(obj):
--> 248             output = map_display(obj)
249     elif isinstance(obj, Plot):
250         output = render(obj)

~/anaconda3/lib/python3.6/site-packages/holoviews/ipython/display_hooks.py in wrapped(element)
140         try:
141             max_frames = OutputSettings.options['max_frames']
--> 142             mimebundle = fn(element, max_frames=max_frames)
143             if mimebundle is None:
144                 return {}, {}

~/anaconda3/lib/python3.6/site-packages/holoviews/ipython/display_hooks.py in map_display(vmap, max_frames)
200         return None
201
--> 202     return render(vmap)
203
204

~/anaconda3/lib/python3.6/site-packages/holoviews/ipython/display_hooks.py in render(obj, **kwargs)
63         renderer = renderer.instance(fig='png')
64
---> 65     return renderer.components(obj, **kwargs)
66
67

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/renderer.py in components(self, obj, fmt, comm, **kwargs)
268         # Bokeh has to handle comms directly in <0.12.15
269         comm = False if bokeh_version < '0.12.15' else comm
--> 270         return super(BokehRenderer, self).components(obj,fmt, comm, **kwargs)
271
272

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/renderer.py in components(self, obj, fmt, comm, **kwargs)
327             plot = obj
328         else:
--> 329             plot, fmt = self._validate(obj, fmt)
330
331         widget_id = None

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/renderer.py in _validate(self, obj, fmt, **kwargs)
226         if isinstance(obj, tuple(self.widgets.values())):
227             return obj, 'html'
--> 228         plot = self.get_plot(obj, renderer=self, **kwargs)
229
230         fig_formats = self.mode_formats['fig'][self.mode]

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/renderer.py in get_plot(self_or_cls, obj, doc, renderer)
153             curdoc().theme = self_or_cls.theme
154         doc.theme = self_or_cls.theme
--> 155         plot = super(BokehRenderer, self_or_cls).get_plot(obj, renderer)
156         plot.document = doc
157         return plot

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/renderer.py in get_plot(self_or_cls, obj, renderer)
213             init_key = tuple(v if d is None else d for v, d in
214                              zip(plot.keys[0], defaults))
--> 215             plot.update(init_key)
216         else:
217             plot = obj

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/plot.py in update(self, key)
512         if len(self) == 1 and ((key == 0) or (key == self.keys[0])) and not self.drawn:
513             return self.initialize_plot()
--> 514         item = self.__getitem__(key)
515         self.traverse(lambda x: setattr(x, '_updated', True))
516         return item

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/plot.py in __getitem__(self, frame)
250         if not isinstance(frame, tuple):
251             frame = self.keys[frame]
--> 252         self.update_frame(frame)
253         return self.state
254

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/util.py in wrapper(self, *args, **kwargs)
513                 self.document._held_events = self.document._held_events[:-1]
514
--> 515         ret = f(self, *args, **kwargs)
516
517         for source in shared_sources:

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/plot.py in update_frame(self, key, ranges)
897             subplot = self.subplots.get((r, c), None)
898             if subplot is not None:
--> 899                 subplot.update_frame(key, ranges)
900         title = self._get_title(key)
901         if title:

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/plot.py in update_frame(self, key, ranges)
952             subplot = self.subplots.get(pos)
953             if subplot is not None:
--> 954                 plot = subplot.update_frame(key, ranges)
955         return plot

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/element.py in update_frame(self, key, ranges, element)
1505                 if triggering and all(s not in triggering for s in subplot.streams):
1506                     continue
-> 1507             subplot.update_frame(key, ranges, element=el)
1508
1509         if not self.batched and isinstance(self.hmap, DynamicMap) and items:

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/element.py in update_frame(self, key, ranges, plot, element)
818             self._update_plot(key, plot, style_element)
819
--> 820         self._update_glyphs(element, ranges)
821         self._execute_hooks(element)
822

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/element.py in _update_glyphs(self, element, ranges)
936             glyph = self.handles.get(key+'_glyph')
937             if not self.static_source and gdata is not None:
--> 938                 self._update_datasource(source, gdata)
939
940             if glyph:

~/anaconda3/lib/python3.6/site-packages/holoviews/plotting/bokeh/graphs.py in _update_datasource(self, source, data)
223         if isinstance(source, ColumnDataSource):
224             if self.handles['static_source']:
--> 225                 source.trigger('data')
226             else:
227                 source.data.update(data)

TypeError: trigger() missing 2 required positional arguments: 'old' and 'new'

# Fixed code
def _update_datasource(self, source, data):
    """
    Update datasource with data for a new frame.
    """
    if isinstance(source, ColumnDataSource):
        if self.handles["static_source"]:
            source.trigger("data", source.data, data)
        else:
            source.data.update(data)
    else:
        source.graph_layout = data