prompt: 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()
  
  ```
  
golden_diff: 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
  
verification_info: {"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"}]}