We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Transform docstring ends abruptly
```
    Bases: bokeh.model.Model
    Base class for Transform models that represent a computation to be carried out on the client-side.
    JavaScript implementations should implement the following methods:
```
<img width="879" alt="screen shot 2017-02-17 at 2 43 31 am" src="https://cloud.githubusercontent.com/assets/1796208/23058499/e52042e8-f4ba-11e6-8f8a-596498e00084.png">

Should add the methods that need to be implemented.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `bokeh/models/transforms.py`
Content:
```
1 '''
2 
3 '''
4 from __future__ import absolute_import
5 
6 from ..core.enums import StepMode, JitterRandomDistribution
7 from ..core.has_props import abstract
8 from ..core.properties import Bool, Either, Enum, Float, Instance, Seq, String
9 from ..model import Model
10 
11 from .sources import ColumnarDataSource
12 
13 @abstract
14 class Transform(Model):
15     ''' Base class for ``Transform`` models that represent a computation
16     to be carried out on the client-side.
17 
18     JavaScript implementations should implement the following methods:
19 
20     .. code-block: coffeescript
21 
22         compute: (x) ->
23             # compute the transform of a single value
24 
25         v_compute: (xs) ->
26             # compute the transform of an array of values
27 
28     '''
29     pass
30 
31 
32 class Jitter(Transform):
33     ''' Apply either a uniform or normally sampled random jitter to data.
34 
35     '''
36 
37 
38     mean = Float(default=0, help="""
39     The central value for the random sample
40     """)
41 
42     width = Float(default=1, help="""
43     The width (absolute for uniform distribution and sigma for the normal distribution) of the random sample.
44     """)
45 
46     distribution = Enum(JitterRandomDistribution, default='uniform', help="""
47     The random distribution upon which to pull the random scatter
48     """)
49 
50 @abstract
51 class Interpolator(Transform):
52     ''' Base class for interpolator transforms.
53 
54     Interpolators return the value of a function which has been evaluated
55     between specified (x, y) pairs of data.  As an example, if two control
56     point pairs were provided to the interpolator, a linear interpolaction
57     at a specific value of 'x' would result in the value of 'y' which existed
58     on the line conneting the two control points.
59 
60     The control point pairs for the interpolators can be specified through either
61 
62     * A literal sequence of values:
63 
64     .. code-block: python
65 
66         interp = Interpolator(x=[1, 2, 3, 4, 5], y=[2, 5, 10, 12, 16])
67 
68     * or a pair of columns defined in a `ColumnDataSource` object:
69 
70     .. code-block: python
71 
72         interp = Interpolator(x="year", y="earnings", data=jewlery_prices))
73 
74 
75     This is the base class and is not intended to end use.  Please see the
76     documentation for the final derived classes (Jitter, LineraInterpolator,
77     StepInterpolator) for mor information on their specific methods of
78     interpolation.
79 
80     '''
81     x = Either(String, Seq(Float), help="""
82     Independant coordiante denoting the location of a point.
83     """)
84 
85     y = Either(String, Seq(Float), help="""
86     Dependant coordinate denoting the value of a point at a location.
87     """)
88 
89     data = Instance(ColumnarDataSource, help="""
90     Data which defines the source for the named columns if a string is passed to either the ``x`` or ``y`` parameters.
91     """)
92 
93     clip = Bool(True, help="""
94     Determine if the interpolation should clip the result to include only values inside its predefined range.
95     If this is set to False, it will return the most value of the closest point.
96     """)
97 
98     # Define an initialization routine to do some cross checking of input values
99     def __init__(self, **kwargs):
100         super(Interpolator, self).__init__(**kwargs)
101 
102 
103 class LinearInterpolator(Interpolator):
104     ''' Compute a linear interpolation between the control points provided through
105     the ``x``, ``y``, and ``data`` parameters.
106 
107     '''
108     pass
109 
110 
111 class StepInterpolator(Interpolator):
112     ''' Compute a step-wise interpolation between the points provided through
113     the ``x``, ``y``, and ``data`` parameters.
114 
115     '''
116 
117     mode = Enum(StepMode, default="after", help="""
118     Adjust the behavior of the returned value in relation to the control points.  The parameter can assume one of three values:
119 
120     * ``after`` (default): Assume the y-value associated with the nearest x-value which is less than or equal to the point to transform.
121     * ``before``: Assume the y-value associated with the nearest x-value which is greater than the point to transform.
122     * ``center``: Assume the y-value associated with the nearest x-value to the point to transform.
123     """)
124
```
--- 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/bokeh/models/transforms.py b/bokeh/models/transforms.py
--- a/bokeh/models/transforms.py
+++ b/bokeh/models/transforms.py
@@ -19,11 +19,11 @@
 
     .. code-block: coffeescript
 
-        compute: (x) ->
-            # compute the transform of a single value
+       compute: (x) ->
+           # compute the transform of a single value
 
-        v_compute: (xs) ->
-            # compute the transform of an array of values
+       v_compute: (xs) ->
+           # compute the transform of an array of values
 
     '''
     pass

{"golden_diff": "diff --git a/bokeh/models/transforms.py b/bokeh/models/transforms.py\n--- a/bokeh/models/transforms.py\n+++ b/bokeh/models/transforms.py\n@@ -19,11 +19,11 @@\n \n     .. code-block: coffeescript\n \n-        compute: (x) ->\n-            # compute the transform of a single value\n+       compute: (x) ->\n+           # compute the transform of a single value\n \n-        v_compute: (xs) ->\n-            # compute the transform of an array of values\n+       v_compute: (xs) ->\n+           # compute the transform of an array of values\n \n     '''\n     pass\n", "issue": "Transform docstring ends abruptly\n```\r\n    Bases: bokeh.model.Model\r\n    Base class for Transform models that represent a computation to be carried out on the client-side.\r\n    JavaScript implementations should implement the following methods:\r\n```\r\n<img width=\"879\" alt=\"screen shot 2017-02-17 at 2 43 31 am\" src=\"https://cloud.githubusercontent.com/assets/1796208/23058499/e52042e8-f4ba-11e6-8f8a-596498e00084.png\">\r\n\r\nShould add the methods that need to be implemented.\r\n\n", "before_files": [{"content": "'''\n\n'''\nfrom __future__ import absolute_import\n\nfrom ..core.enums import StepMode, JitterRandomDistribution\nfrom ..core.has_props import abstract\nfrom ..core.properties import Bool, Either, Enum, Float, Instance, Seq, String\nfrom ..model import Model\n\nfrom .sources import ColumnarDataSource\n\n@abstract\nclass Transform(Model):\n    ''' Base class for ``Transform`` models that represent a computation\n    to be carried out on the client-side.\n\n    JavaScript implementations should implement the following methods:\n\n    .. code-block: coffeescript\n\n        compute: (x) ->\n            # compute the transform of a single value\n\n        v_compute: (xs) ->\n            # compute the transform of an array of values\n\n    '''\n    pass\n\n\nclass Jitter(Transform):\n    ''' Apply either a uniform or normally sampled random jitter to data.\n\n    '''\n\n\n    mean = Float(default=0, help=\"\"\"\n    The central value for the random sample\n    \"\"\")\n\n    width = Float(default=1, help=\"\"\"\n    The width (absolute for uniform distribution and sigma for the normal distribution) of the random sample.\n    \"\"\")\n\n    distribution = Enum(JitterRandomDistribution, default='uniform', help=\"\"\"\n    The random distribution upon which to pull the random scatter\n    \"\"\")\n\n@abstract\nclass Interpolator(Transform):\n    ''' Base class for interpolator transforms.\n\n    Interpolators return the value of a function which has been evaluated\n    between specified (x, y) pairs of data.  As an example, if two control\n    point pairs were provided to the interpolator, a linear interpolaction\n    at a specific value of 'x' would result in the value of 'y' which existed\n    on the line conneting the two control points.\n\n    The control point pairs for the interpolators can be specified through either\n\n    * A literal sequence of values:\n\n    .. code-block: python\n\n        interp = Interpolator(x=[1, 2, 3, 4, 5], y=[2, 5, 10, 12, 16])\n\n    * or a pair of columns defined in a `ColumnDataSource` object:\n\n    .. code-block: python\n\n        interp = Interpolator(x=\"year\", y=\"earnings\", data=jewlery_prices))\n\n\n    This is the base class and is not intended to end use.  Please see the\n    documentation for the final derived classes (Jitter, LineraInterpolator,\n    StepInterpolator) for mor information on their specific methods of\n    interpolation.\n\n    '''\n    x = Either(String, Seq(Float), help=\"\"\"\n    Independant coordiante denoting the location of a point.\n    \"\"\")\n\n    y = Either(String, Seq(Float), help=\"\"\"\n    Dependant coordinate denoting the value of a point at a location.\n    \"\"\")\n\n    data = Instance(ColumnarDataSource, help=\"\"\"\n    Data which defines the source for the named columns if a string is passed to either the ``x`` or ``y`` parameters.\n    \"\"\")\n\n    clip = Bool(True, help=\"\"\"\n    Determine if the interpolation should clip the result to include only values inside its predefined range.\n    If this is set to False, it will return the most value of the closest point.\n    \"\"\")\n\n    # Define an initialization routine to do some cross checking of input values\n    def __init__(self, **kwargs):\n        super(Interpolator, self).__init__(**kwargs)\n\n\nclass LinearInterpolator(Interpolator):\n    ''' Compute a linear interpolation between the control points provided through\n    the ``x``, ``y``, and ``data`` parameters.\n\n    '''\n    pass\n\n\nclass StepInterpolator(Interpolator):\n    ''' Compute a step-wise interpolation between the points provided through\n    the ``x``, ``y``, and ``data`` parameters.\n\n    '''\n\n    mode = Enum(StepMode, default=\"after\", help=\"\"\"\n    Adjust the behavior of the returned value in relation to the control points.  The parameter can assume one of three values:\n\n    * ``after`` (default): Assume the y-value associated with the nearest x-value which is less than or equal to the point to transform.\n    * ``before``: Assume the y-value associated with the nearest x-value which is greater than the point to transform.\n    * ``center``: Assume the y-value associated with the nearest x-value to the point to transform.\n    \"\"\")\n", "path": "bokeh/models/transforms.py"}], "after_files": [{"content": "'''\n\n'''\nfrom __future__ import absolute_import\n\nfrom ..core.enums import StepMode, JitterRandomDistribution\nfrom ..core.has_props import abstract\nfrom ..core.properties import Bool, Either, Enum, Float, Instance, Seq, String\nfrom ..model import Model\n\nfrom .sources import ColumnarDataSource\n\n@abstract\nclass Transform(Model):\n    ''' Base class for ``Transform`` models that represent a computation\n    to be carried out on the client-side.\n\n    JavaScript implementations should implement the following methods:\n\n    .. code-block: coffeescript\n\n       compute: (x) ->\n           # compute the transform of a single value\n\n       v_compute: (xs) ->\n           # compute the transform of an array of values\n\n    '''\n    pass\n\n\nclass Jitter(Transform):\n    ''' Apply either a uniform or normally sampled random jitter to data.\n\n    '''\n\n\n    mean = Float(default=0, help=\"\"\"\n    The central value for the random sample\n    \"\"\")\n\n    width = Float(default=1, help=\"\"\"\n    The width (absolute for uniform distribution and sigma for the normal distribution) of the random sample.\n    \"\"\")\n\n    distribution = Enum(JitterRandomDistribution, default='uniform', help=\"\"\"\n    The random distribution upon which to pull the random scatter\n    \"\"\")\n\n@abstract\nclass Interpolator(Transform):\n    ''' Base class for interpolator transforms.\n\n    Interpolators return the value of a function which has been evaluated\n    between specified (x, y) pairs of data.  As an example, if two control\n    point pairs were provided to the interpolator, a linear interpolaction\n    at a specific value of 'x' would result in the value of 'y' which existed\n    on the line conneting the two control points.\n\n    The control point pairs for the interpolators can be specified through either\n\n    * A literal sequence of values:\n\n    .. code-block: python\n\n        interp = Interpolator(x=[1, 2, 3, 4, 5], y=[2, 5, 10, 12, 16])\n\n    * or a pair of columns defined in a `ColumnDataSource` object:\n\n    .. code-block: python\n\n        interp = Interpolator(x=\"year\", y=\"earnings\", data=jewlery_prices))\n\n\n    This is the base class and is not intended to end use.  Please see the\n    documentation for the final derived classes (Jitter, LineraInterpolator,\n    StepInterpolator) for mor information on their specific methods of\n    interpolation.\n\n    '''\n    x = Either(String, Seq(Float), help=\"\"\"\n    Independant coordiante denoting the location of a point.\n    \"\"\")\n\n    y = Either(String, Seq(Float), help=\"\"\"\n    Dependant coordinate denoting the value of a point at a location.\n    \"\"\")\n\n    data = Instance(ColumnarDataSource, help=\"\"\"\n    Data which defines the source for the named columns if a string is passed to either the ``x`` or ``y`` parameters.\n    \"\"\")\n\n    clip = Bool(True, help=\"\"\"\n    Determine if the interpolation should clip the result to include only values inside its predefined range.\n    If this is set to False, it will return the most value of the closest point.\n    \"\"\")\n\n    # Define an initialization routine to do some cross checking of input values\n    def __init__(self, **kwargs):\n        super(Interpolator, self).__init__(**kwargs)\n\n\nclass LinearInterpolator(Interpolator):\n    ''' Compute a linear interpolation between the control points provided through\n    the ``x``, ``y``, and ``data`` parameters.\n\n    '''\n    pass\n\n\nclass StepInterpolator(Interpolator):\n    ''' Compute a step-wise interpolation between the points provided through\n    the ``x``, ``y``, and ``data`` parameters.\n\n    '''\n\n    mode = Enum(StepMode, default=\"after\", help=\"\"\"\n    Adjust the behavior of the returned value in relation to the control points.  The parameter can assume one of three values:\n\n    * ``after`` (default): Assume the y-value associated with the nearest x-value which is less than or equal to the point to transform.\n    * ``before``: Assume the y-value associated with the nearest x-value which is greater than the point to transform.\n    * ``center``: Assume the y-value associated with the nearest x-value to the point to transform.\n    \"\"\")\n", "path": "bokeh/models/transforms.py"}]}