internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: bokeh/bokeh

Issue:
documentation: user guide describes unsupported axis locations
http://bokeh.pydata.org/en/latest/docs/user_guide/objects.html#axes

> location: where along the cross-dimension to locate this axis: "min", "max", "left", "right", "top", "bottom" or a floating point value

I am unable to set an axis location that is not one of the four values from the Location enum - anything else (including 'min', 'max', or floating point values) yields:

> ValueError: expected an element of either Auto or Enum('above', 'below', 'left', 'right')

Is the documentation wrong? If not, how would one go about offsetting an axis?



Discussion:
> Is the documentation wrong? 

Yes, documentation has to be updated.

> If not, how would one go about offsetting an axis?

It is not implemented yet... It was implementation in a previous version but with the new layout system, this is not the case.

Btw, would you like to submit a PR to fix the doc? :wink:

@damianavila, it's good to check if bokehjs doesn't implement those. If so, it would be better to expose those the API fully to bokeh.

There is none atm. 

> @damianavila, it's good to check if bokehjs doesn't implement those. If so, it would be better to expose those the API fully to bokeh.

I checked the bokehjs source code and I did not find any implementation, to be sure I also confirm this with @bryevdv...

estimate: 1hr


Resolving patch:
diff --git a/bokeh/models/axes.py b/bokeh/models/axes.py
--- a/bokeh/models/axes.py
+++ b/bokeh/models/axes.py
@@ -19,7 +19,7 @@ class Axis(GuideRenderer):
     """
 
     location = Either(Auto, Enum(Location), help="""
-    Where the axis should be positioned on the plot.
+    Where should labels and ticks be located in relation to the axis rule.
     """)
 
     bounds = Either(Auto, Tuple(Float, Float), help="""


Test patch:
Repository: bokeh/bokeh

Issue:
restore width and height for figure() calls
reference:

http://stackoverflow.com/questions/24962086/in-bokeh-0-5-0-cannot-specify-size-of-chart-and-previous-versions-appear-in-sa



Discussion:
`plotting.figure` just needs to accept either `width` or `plot_width` (but not both) and either `height` or `plot_height` (but not both)


Resolving patch:
diff --git a/bokeh/plotting.py b/bokeh/plotting.py
--- a/bokeh/plotting.py
+++ b/bokeh/plotting.py
@@ -318,6 +318,15 @@ def figure(**kwargs):
        figure : a new :class:`Plot <bokeh.models.plots.Plot>`
 
     '''
+    if 'plot_width' in kwargs and 'width' in kwargs:
+        raise ValueError("figure() called but both plot_width and width supplied, supply only one")
+    if 'plot_height' in kwargs and 'height' in kwargs:
+        raise ValueError("figure() called but both plot_height and height supplied, supply only one")
+    if 'height' in kwargs:
+        kwargs['plot_height'] = kwargs.pop('height')
+    if 'width' in kwargs:
+        kwargs['plot_width'] = kwargs.pop('width')
+
     fig = Figure(**kwargs)
     curdoc()._current_plot = fig
     curdoc().add(fig)


Test patch:
diff --git a/bokeh/tests/test_plotting.py b/bokeh/tests/test_plotting.py
--- a/bokeh/tests/test_plotting.py
+++ b/bokeh/tests/test_plotting.py
@@ -1,7 +1,7 @@
 import unittest
 
 import bokeh.plotting as plt
-from ..models import (Grid, LinearAxis, PanTool, BoxZoomTool, LassoSelectTool,
+from bokeh.models import (Grid, LinearAxis, PanTool, BoxZoomTool, LassoSelectTool,
                       PanTool, PreviewSaveTool, ResetTool, ResizeTool)
 
 class TestPlotting(unittest.TestCase):
@@ -25,6 +25,14 @@ def test_figure(self):
         r = plt.figure()
         self.assertNotEqual(p, r)
         self.assertNotEqual(q, r)
+        p = plt.figure(width=100, height=120)
+        self.assertEqual(p.plot_width, 100)
+        self.assertEqual(p.plot_height, 120)
+        p = plt.figure(plot_width=100, plot_height=120)
+        self.assertEqual(p.plot_width, 100)
+        self.assertEqual(p.plot_height, 120)
+        self.assertRaises(ValueError, plt.figure, plot_width=100, width=120)
+        self.assertRaises(ValueError, plt.figure, plot_height=100, height=120)
 
     def test_xaxis(self):
         p = plt.figure()
@@ -140,3 +148,5 @@ def test_tools(self):
             self.assertIsInstance(fig.tools[i], _type)
 
 
+if __name__ == "__main__":
+    unittest.main()
Repository: bokeh/bokeh

Issue:
Investigate serialization of alpha values
Reference: https://github.com/bokeh/bokeh/pull/1582#issuecomment-68000139



Discussion:
status: only a quick look for now (~30mins)


Resolving patch:
diff --git a/bokeh/mixins.py b/bokeh/mixins.py
--- a/bokeh/mixins.py
+++ b/bokeh/mixins.py
@@ -5,14 +5,14 @@
 
 class FillProps(HasProps):
     """ Mirrors the BokehJS properties.Fill class. """
-    fill_color = ColorSpec("gray")
-    fill_alpha = DataSpec(1.0)
+    fill_color = ColorSpec(default="gray")
+    fill_alpha = DataSpec(default=1.0)
 
 class LineProps(HasProps):
     """ Mirrors the BokehJS properties.Line class. """
-    line_color = ColorSpec("black")
+    line_color = ColorSpec(default="black")
     line_width = DataSpec
-    line_alpha = DataSpec(1.0)
+    line_alpha = DataSpec(default=1.0)
     line_join = Enum(LineJoin)
     line_cap = Enum(LineCap)
     line_dash = DashPattern
@@ -23,7 +23,7 @@ class TextProps(HasProps):
     text_font = String("Helvetica")
     text_font_size = String("12pt")
     text_font_style = Enum(FontStyle)
-    text_color = ColorSpec("#444444")
-    text_alpha = DataSpec(1.0)
+    text_color = ColorSpec(default="#444444")
+    text_alpha = DataSpec(default=1.0)
     text_align = Enum(TextAlign)
     text_baseline = Enum(TextBaseline, default="bottom")
diff --git a/bokeh/properties.py b/bokeh/properties.py
--- a/bokeh/properties.py
+++ b/bokeh/properties.py
@@ -220,7 +220,11 @@ def __init__(self, field=None, units="data", min_value=None, default=_NotSet, he
         """
         # Don't use .name because the HasProps metaclass uses that to
         # store the attribute name on this descriptor.
-        self.field = field
+        if field is None or isinstance(field, string_types):
+            self.field = field
+        else:
+            raise ValueError("'field' must be a string or None, got %r" % field)
+
         self.units = units
         self._default = default
         self.min_value = min_value
@@ -316,7 +320,7 @@ class ColorSpec(DataSpec):
     and indicating a field name to look for on the datasource:
 
     >>> class Bar(HasProps):
-    ...     col = ColorSpec("green")
+    ...     col = ColorSpec(default="green")
     ...     col2 = ColorSpec("colorfield")
 
     >>> b = Bar()
@@ -349,6 +353,9 @@ def __init__(self, field_or_value=None, field=None, value=None, default=_NotSet,
             else:
                 self.field = field_or_value
 
+        if not (self.field is None or isinstance(self.field, string_types)):
+            raise ValueError("'field' must be a string or None, got %r" % self.field)
+
         # We need to distinguish if the user ever explicitly sets the attribute; if
         # they explicitly set it to None, we should pass on None in the dict.
         self._isset = False


Test patch:
Repository: bokeh/bokeh

Issue:
Bound needs to accept datetime obects.
If you try to use bounds in a datetime axis, it throws an error because bounds accept only a tuple of floats.



Discussion:
May be a simple as updating the property definition for `bounds` to accept `Tuple(Datetime, Datetime)` as well. 

Porbably... I will take an stab on it... assigning it myself...


Resolving patch:
diff --git a/bokeh/charts/builder/horizon_builder.py b/bokeh/charts/builder/horizon_builder.py
--- a/bokeh/charts/builder/horizon_builder.py
+++ b/bokeh/charts/builder/horizon_builder.py
@@ -254,7 +254,7 @@ def get_source(self):
         calculate the proper ranges.
         """
         self._source = ColumnDataSource(self._data)
-        self.x_range = DataRange1d(sources=[self._source.columns(self._attr[0])])
+        self.x_range = DataRange1d(rangepadding=0, sources=[self._source.columns(self._attr[0])])
         self.y_range = Range1d(start=0, end=self._max_y)
 
     def draw(self):
diff --git a/bokeh/models/axes.py b/bokeh/models/axes.py
--- a/bokeh/models/axes.py
+++ b/bokeh/models/axes.py
@@ -4,7 +4,7 @@
 """
 from __future__ import absolute_import
 
-from ..properties import Int, Float, String, Enum, Bool, Auto, Instance, Tuple, Either, Include
+from ..properties import Int, Float, String, Enum, Bool, Datetime, Auto, Instance, Tuple, Either, Include
 from ..mixins import LineProps, TextProps
 from ..enums import Location
 
@@ -26,7 +26,7 @@ class Axis(GuideRenderer):
     Where should labels and ticks be located in relation to the axis rule.
     """)
 
-    bounds = Either(Auto, Tuple(Float, Float), help="""
+    bounds = Either(Auto, Tuple(Float, Float), Tuple(Datetime, Datetime), help="""
     Bounds for the rendered axis. If unset, the axis will span the
     entire plot in the given dimension.
     """)


Test patch:
Repository: bokeh/bokeh

Issue:
BoxPlot Chart does not work with iterables of lists
The following does not work:

``` Python
from collections import OrderedDict
from bokeh.charts import BoxPlot
import numpy as np
medals = OrderedDict([
            ('bronze', [7.0, 10.0, 8.0, 7.0, 4.0, 4.0, 1.0, 5.0, 2.0, 1.0,
                        4.0, 2.0, 1.0, 2.0, 4.0, 1.0, 0.0, 1.0, 1.0, 2.0,
                        0.0, 1.0, 0.0, 0.0, 1.0, 1.0]),
            ('silver', [8., 4., 6., 4., 8., 3., 3., 2., 5., 6.,
                        1., 4., 2., 3., 2., 0., 0., 1., 2., 1.,
                        3.,  0.,  0.,  1.,  0.,  0.]),
            ('gold', [6., 6., 6., 8., 4., 8., 6., 3., 2., 2.,  2.,  1.,
                      3., 1., 0., 5., 4., 2., 0., 0., 0., 1., 1., 0., 0.,
                      0.])
        ])
boxplot = BoxPlot(medals, marker="circle", outliers=True,
                  title="boxplot, dict_input", xlabel="medal type", ylabel="medal count",
                  width=800, height=600, filename='boxplot.html')
boxplot.show()
```



Discussion:
If this is a simple fix it should probably go in 0.8


Resolving patch:
diff --git a/bokeh/charts/builder/boxplot_builder.py b/bokeh/charts/builder/boxplot_builder.py
--- a/bokeh/charts/builder/boxplot_builder.py
+++ b/bokeh/charts/builder/boxplot_builder.py
@@ -157,8 +157,8 @@ def _process_data(self):
             outliers = np.where(
                 (self._values[level] > upper) | (self._values[level] < lower)
             )[0]
-            out = self._values[level][outliers]
-            for o in out:
+            for out in outliers:
+                o = self._values[level][out]
                 out_x.append(level)
                 out_y.append(o)
                 out_color.append(self.palette[i])


Test patch:
Repository: bokeh/bokeh

Issue:
Axis.hide should have been called Axis.visible
Obviously with reversed logic as well. Reasons: we already have `Glyph.visible` (no need to invent new names) and our properties are nouns or adjectives (at minimum, this property should have been called `hidden`). This should be resolved for 0.8 (it's a new property).



Discussion:
@mattpap sure that seems reasonable, can you knock this out right quick?

Sure.


Resolving patch:
diff --git a/bokeh/charts/builder/horizon_builder.py b/bokeh/charts/builder/horizon_builder.py
--- a/bokeh/charts/builder/horizon_builder.py
+++ b/bokeh/charts/builder/horizon_builder.py
@@ -86,7 +86,7 @@ def Horizon(values, index=None, num_folds=3, pos_color='#006400',
     )
 
     # Hide numerical axis
-    chart.left[0].hide = True
+    chart.left[0].visible = False
 
     # Add the series names to the y axis
     chart.extra_y_ranges = {"series": FactorRange(factors=chart._builders[0]._series)}
@@ -304,4 +304,4 @@ def _yield_renderers(self):
         # at any vertical places on the plot
 
         # TODO: Add the legend to display the fold ranges based on the color of
-        # the fold
\ No newline at end of file
+        # the fold
diff --git a/bokeh/models/axes.py b/bokeh/models/axes.py
--- a/bokeh/models/axes.py
+++ b/bokeh/models/axes.py
@@ -18,7 +18,7 @@ class Axis(GuideRenderer):
 
     """
 
-    hide = Bool(False, help="""
+    visible = Bool(True, help="""
     Ability to hide the entire axis from the plot.
     """)
 


Test patch:
Repository: bokeh/bokeh

Issue:
app_reveal fails importing old plotting stuff
```
(py34devel)[damian@damian-S400CA][slideshow](master)$ python app_reveal.py 
Traceback (most recent call last):
  File "app_reveal.py", line 19, in <module>
    from bokeh.plotting import (annular_wedge, cursession, figure, hold, legend,
ImportError: cannot import name 'annular_wedge'
```



Discussion:

Resolving patch:
diff --git a/examples/embed/slideshow/app_reveal.py b/examples/embed/slideshow/app_reveal.py
--- a/examples/embed/slideshow/app_reveal.py
+++ b/examples/embed/slideshow/app_reveal.py
@@ -16,8 +16,7 @@
 
 from bokeh.embed import autoload_server
 from bokeh.models import GlyphRenderer
-from bokeh.plotting import (annular_wedge, cursession, figure, hold, legend,
-                            line, output_server, push, quad, xgrid, ygrid)
+from bokeh.plotting import cursession, figure, output_server, push
 
 from flask import Flask, render_template
 app = Flask(__name__)


Test patch:
Repository: bokeh/bokeh

Issue:
`publishing` example from the `embed` directory fails
With an error message that is not particularly helpfull. Using bokeh 0.8.

```
➜  embed  python publishing.py
Using saved session configuration for http://localhost:5006/
To override, pass 'load_from_config=False' to Session
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
Traceback (most recent call last):
  File "publishing.py", line 11, in <module>
    Session().register('testuser', 'testpassword')
  File "/Users/nicolas/anaconda/lib/python2.7/site-packages/bokeh/session.py", line 208, in register
    raise RuntimeError("Unknown Error")
RuntimeError: Unknown Error
```



Discussion:
This is because you need the bokeh-server working... but it is weird because I have this traceback:

```
Using saved session configuration for http://localhost:5006/
To override, pass 'load_from_config=False' to Session
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost
/media/datos/Desarrollos/bokeh/bokeh/session.py:318: UserWarning: You need to start the bokeh-server to see this example.
  warnings.warn("You need to start the bokeh-server to see this example.")
Traceback (most recent call last):
  File "publishing.py", line 11, in <module>
    Session().register('testuser', 'testpassword')
  File "/media/datos/Desarrollos/bokeh/bokeh/session.py", line 205, in register
    'api': 'true'
  File "/media/datos/Desarrollos/bokeh/bokeh/session.py", line 319, in execute
    raise e
requests.exceptions.ConnectionError: ('Connection aborted.', error(111, 'Connection refused'))
```

where you can see we warn about the need of the server...

OK, now with the server working I can reproduce your error...

Yeah, i should have mentionned i had the bokeh-server running...

You need to start the bokeh server with the `-m` option... http://bokeh.pydata.org/en/latest/docs/user_guide/server.html#authentication

I forgot about that...:wink: 
We probably need to add that to the README.


Resolving patch:
diff --git a/examples/embed/publishing.py b/examples/embed/publishing.py
--- a/examples/embed/publishing.py
+++ b/examples/embed/publishing.py
@@ -1,4 +1,5 @@
 # The plot server must be running
+# The server must run with --multi-user for this example to work
 # Go to http://localhost:5006/bokeh to view this plot
 
 import time


Test patch:
Repository: bokeh/bokeh

Issue:
image glyph method should warn if no palette or color mapper supplied
reference: https://twitter.com/BokehPlots/status/568153221228670976



Discussion:

Resolving patch:
diff --git a/bokeh/models/glyphs.py b/bokeh/models/glyphs.py
--- a/bokeh/models/glyphs.py
+++ b/bokeh/models/glyphs.py
@@ -286,9 +286,9 @@ class Image(Glyph):
     def __init__(self, **kwargs):
         if 'palette' in kwargs and 'color_mapper' in kwargs:
             raise ValueError("only one of 'palette' and 'color_mapper' may be specified")
-
-        palette = kwargs.pop('palette', None)
-        if palette is not None:
+        elif 'color_mapper' not in kwargs:
+            # Use a palette (given or default)
+            palette = kwargs.pop('palette', 'Greys9')
             mapper = LinearColorMapper(palette)
 
             reserve_val = kwargs.pop('reserve_val', None)


Test patch:
Repository: bokeh/bokeh

Issue:
Develop installation fails: No such file or directory: '/usr/lib/python3.4/site-packages/bokeh.pth'
I am on Ubuntu Linux 14.04. setup.py has a function `getsitepackages()` to get the location of the site-packages. It produces `/usr/lib/python3.4/site-packages` on my machine, which should have been `/usr/local/lib/python3.4/dist-packages`.

AFAIK: there's two ways to get the site-packages dir:
- `sysconfig.get_path('purelib')`
- `site.getsitepackages()[0]`

Can't we just use one of these? 



Discussion:
Correction: `sysconfig.get_path()` does not work on pypy. and in Jython there is no `site.getsitepackages()`.


Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -125,7 +125,7 @@ def getsitepackages():
                                      "python" + sys.version[:3],
                                      "site-packages"),
                         os.path.join(prefix, "lib", "site-python"),
-                        os.path.join(prefix, "python" + sys.version[:3], "lib-dynload")]
+                        ]
             lib64_dir = os.path.join(prefix, "lib64", "python" + sys.version[:3], "site-packages")
             if (os.path.exists(lib64_dir) and
                 os.path.realpath(lib64_dir) not in [os.path.realpath(p) for p in sitedirs]):
@@ -140,17 +140,16 @@ def getsitepackages():
             except AttributeError:
                 pass
             # Debian-specific dist-packages directories:
-            if sys.version[0] == '2':
-                sitedirs.append(os.path.join(prefix, "lib",
-                                             "python" + sys.version[:3],
-                                             "dist-packages"))
-            else:
-                sitedirs.append(os.path.join(prefix, "lib",
-                                             "python" + sys.version[0],
-                                             "dist-packages"))
             sitedirs.append(os.path.join(prefix, "local/lib",
                                          "python" + sys.version[:3],
                                          "dist-packages"))
+            sitedirs.append(os.path.join(prefix, "lib",
+                                         "python" + sys.version[:3],
+                                         "dist-packages"))
+            if sys.version_info[0] >= 3:
+                sitedirs.append(os.path.join(prefix, "lib",
+                                             "python" + sys.version[0],
+                                             "dist-packages"))
             sitedirs.append(os.path.join(prefix, "lib", "dist-python"))
         else:
             sitedirs = [prefix, os.path.join(prefix, "lib", "site-packages")]
@@ -169,6 +168,8 @@ def getsitepackages():
                                      'site-packages'))
         for sitedir in sitedirs:
             sitepackages.append(os.path.abspath(sitedir))
+    
+    sitepackages = [p for p in sitepackages if os.path.isdir(p)]
     return sitepackages
 
 def check_remove_bokeh_install(site_packages):


Test patch:
Repository: bokeh/bokeh

Issue:
logging.basicConfig should not be called by 'import bokeh'
The `logging.basicConfig` call is typically performed by the user. It is allowed to be called only once during program life time, all subsequent calls do nothing.

For these reason I think it is not nice to have it done implicitly by `import bokeh`. It breaks any application using `bokeh` that configures logging after loading used modules.

The respective line in the code: https://github.com/bokeh/bokeh/blob/master/bokeh/__init__.py#L12)



Discussion:
Hrmm not sure when that got put in there. It probably ought to be off by default, but configurable with an environment variable. It is often desirable to run the examples with logging on, but would be a tedious burden to have to edit the file every time beforehand. 

suggest `BOKEH_PYTHON_LOGGING` (yes/no) handled in `settings.py`

> suggest BOKEH_PYTHON_LOGGING (yes/no) handled in settings.py

I agree with this solution...

As an aside, we nee to make the env var names more consistent in terms of what configures the python side and what configures the JS side. e.g, `BOKEH_LOG_LEVEL`  should probably be `BOKEHJS_LOG_LEVEL`

> As an aside, we nee to make the env var names more consistent

:+1:


Resolving patch:
diff --git a/bokeh/__init__.py b/bokeh/__init__.py
--- a/bokeh/__init__.py
+++ b/bokeh/__init__.py
@@ -9,8 +9,9 @@
 
 # configure logger level
 level = settings.py_log_level()
-logging.basicConfig(level=level)
-# set up the logger
+if level is not None:
+    logging.basicConfig(level=level)
+
 log = logging.getLogger(__name__)
 
 try:
diff --git a/bokeh/settings.py b/bokeh/settings.py
--- a/bokeh/settings.py
+++ b/bokeh/settings.py
@@ -61,13 +61,14 @@ def minified(self, default=None):
     def log_level(self, default=None):
         return self._get_str("LOG_LEVEL", default, "debug")
 
-    def py_log_level(self, default='info'):
+    def py_log_level(self, default='none'):
         level = self._get_str("PY_LOG_LEVEL", default, "debug")
         LEVELS = {'debug': logging.DEBUG,
                   'info' : logging.INFO,
                   'warn' : logging.WARNING,
                   'error': logging.ERROR,
-                  'fatal': logging.CRITICAL}
+                  'fatal': logging.CRITICAL,
+                  'none' : None}
         return LEVELS[level]
 
     def pretty(self, default=None):


Test patch:
Repository: bokeh/bokeh

Issue:
try to make y.y.yrc, not y.y.y.rc in dev build to avoid being listed above y.y.y release



Discussion:

Resolving patch:
diff --git a/bokeh/resources.py b/bokeh/resources.py
--- a/bokeh/resources.py
+++ b/bokeh/resources.py
@@ -37,15 +37,15 @@ def _get_cdn_urls(version=None, minified=True):
         else:
             version = __version__.split('-')[0]
 
-    # check the 'dev' fingerprint
-    dev = version.split('.')[-2]
     # check if we want minified js and css
     _min = ".min" if minified else ""
 
     base_url = _cdn_base_url()
     dev_container = 'bokeh/dev'
     rel_container = 'bokeh/release'
-    container = dev_container if dev.startswith(('dev', 'rc')) else rel_container
+
+    # check the 'dev' fingerprint
+    container = dev_container if version.endswith(('dev', 'rc')) else rel_container
 
     result = {
         'js_files'  : ['%s/%s/bokeh-%s%s.js' % (base_url, container, version, _min)],
diff --git a/scripts/get_bump_version.py b/scripts/get_bump_version.py
--- a/scripts/get_bump_version.py
+++ b/scripts/get_bump_version.py
@@ -15,18 +15,9 @@ def get_version_from_git():
 
     version = proc.stdout.read().decode('utf-8').strip()
 
-    try:
-        vers, mod = version.split("-")[:2]
-        if not mod.startswith(('rc', 'dev')):
-            mod = ""
-    except ValueError:
-        vers, mod = version, ""
+    vers = version.split("-")[0]
 
-    return vers, mod
-
-vers, mod = get_version_from_git()
-if mod == "":
-    print(vers)
-else:
-    print(vers + '.' + mod)
+    return vers
 
+vers = get_version_from_git()
+print(vers)


Test patch:
diff --git a/bokeh/tests/test_resources.py b/bokeh/tests/test_resources.py
--- a/bokeh/tests/test_resources.py
+++ b/bokeh/tests/test_resources.py
@@ -4,6 +4,7 @@
 
 import bokeh
 import bokeh.resources as resources
+from bokeh.resources import _get_cdn_urls
 
 WRAPPER = """Bokeh.$(function() {
     foo
@@ -49,6 +50,12 @@ def test_inline(self):
         self.assertEqual(len(r.css_raw), 1)
         self.assertEqual(r.messages, [])
 
+    def test_get_cdn_urls(self):
+        dev_version = "0.0.1dev"
+        result = _get_cdn_urls(dev_version)
+        url = result['js_files'][0]
+        self.assertIn('bokeh/dev', url)
+
     def test_cdn(self):
         resources.__version__ = "1.0"
         r = resources.Resources(mode="cdn", version="1.0")