We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[BUG] Minor typos in validation error output for FactorRange and CDSView
**Software version info**
bokeh 2.0.0
Mozilla Firefox 74.0
macOS Catalina 10.15.3

**Expected behavior:**
Validation errors will have an output with correct spelling.

Example one:
"FactorRange must specify a unique list of categorical factors for an axis"
Example two:
"CDSView filters are not compatible with glyphs with connected topology such as Line or Patch"

**Observed behavior:**
Validation errors have an output with typos (see attached screenshot).

Example one:
"FactorRange must **_specicy_** a unique list of categorical factors for an axis"
Example two:
"CDSView filters are not compatible with glyphs with connected topology **_suchs_** as Line **_and_** Patch"

**Complete, minimal, self-contained example code that reproduces the issue**

**Example one:**
```py
from bokeh.io import output_notebook, show
from bokeh.models import ColumnDataSource, FactorRange
from bokeh.plotting import figure

output_notebook()

fruits = ['Apples', 'Apples']
years = ['2015', '2016']

data = {'fruits' : fruits,
        '2015'   : [2, 1],
        '2016'   : [5, 3]}

x = [ (fruit, year) for fruit in fruits for year in years ]
counts = sum(zip(data['2015'], data['2016']), ()) # like an hstack

source = ColumnDataSource(data=dict(x=x, counts=counts))

p = figure(x_range=FactorRange(*x), plot_height=250, title="Fruit Counts by Year",
           toolbar_location=None, tools="")

p.vbar(x='x', top='counts', width=0.9, source=source)

show(p)

```

**Example two**
```py
from bokeh.layouts import row
from bokeh.plotting import output_notebook, figure, show
from bokeh.sampledata.autompg import autompg
from bokeh.models import CDSView, GroupFilter
from bokeh.models.sources import ColumnDataSource
output_notebook()

autompg = autompg.assign(efficient=(autompg.mpg > 20).astype(str))
autompg = autompg.groupby(['yr', 'efficient']).mpg.mean().reset_index()
autompg = autompg.sort_values(['efficient', 'yr'])
list_p = []
source=ColumnDataSource(autompg)
for eff in ['True', 'False']:
    filter_ = GroupFilter(column_name='efficient', group=eff)
    view = CDSView(source=source, filters=[filter_])

    list_p.append(figure(title=eff))
    list_p[-1].line(x='yr', y='mpg', source=source, view=view)

show(row(list_p))
```

**Screenshots or screencasts of the bug in action**
Example one:
<img width="1052" alt="Screen Shot 2020-04-01 at 11 12 20 PM" src="https://user-images.githubusercontent.com/18173173/78207887-f42d7380-7470-11ea-853a-f7aa905f91d2.png">

Example two:
<img width="1036" alt="Screen Shot 2020-04-01 at 11 24 33 PM" src="https://user-images.githubusercontent.com/18173173/78207888-f68fcd80-7470-11ea-9370-c048914aa6d8.png">

--- 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/core/validation/errors.py`
Content:
```
1 #-----------------------------------------------------------------------------
2 # Copyright (c) 2012 - 2020, Anaconda, Inc., and Bokeh Contributors.
3 # All rights reserved.
4 #
5 # The full license is in the file LICENSE.txt, distributed with this software.
6 #-----------------------------------------------------------------------------
7 ''' These define the standard error codes and messages for Bokeh
8 validation checks.
9 
10 1001 *(BAD_COLUMN_NAME)*
11     A glyph has a property set to a field name that does not correspond to any
12     column in the |GlyphRenderer|'s data source.
13 
14 1002 *(MISSING_GLYPH)*
15     A |GlyphRenderer| has no glyph configured.
16 
17 1003 *(NO_SOURCE_FOR_GLYPH)*
18     A |GlyphRenderer| has no data source configured.
19 
20 1004 *(REQUIRED_RANGE)*
21     A |Plot| is missing one or more required default ranges (will result in
22     blank plot).
23 
24 1005 *(MISSING_GOOGLE_API_KEY)*
25     Google Maps API now requires an API key for all use. See
26     https://developers.google.com/maps/documentation/javascript/get-api-key
27     for more information on how to obtain your own, to use for the
28     ``api_key`` property of your Google Map plot .
29 
30 1006 *(NON_MATCHING_DATA_SOURCES_ON_LEGEND_ITEM_RENDERERS)*
31     All data_sources on ``LegendItem.renderers`` must match when LegendItem.label
32     is type field.
33 
34 1007 *(MISSING_MERCATOR_DIMENSION)*
35     ``MercatorTicker`` and ``MercatorTickFormatter``models must have their
36     ``dimension`` property set to ``'lat'`` or ``'lon'``.
37 
38 1008 *(REQUIRED_SCALE)*
39     A |Scale| on is missing one or more required default scales (will result in
40     blank plot).
41 
42 1009 *(INCOMPATIBLE_SCALE_AND_RANGE)*
43     A |Scale| type is incompatible with one or more ranges on the same plot
44     dimension (will result in blank plot).
45 
46 1010 *(CDSVIEW_SOURCE_DOESNT_MATCH)*
47     A |GlyphRenderer| has a ``CDSView`` whose source doesn't match the ``GlyphRenderer``'s
48     data source.
49 
50 1011 *(MALFORMED_GRAPH_SOURCE)*
51     The ``GraphSource`` is incorrectly configured.
52 
53 1012 *(INCOMPATIBLE_MAP_RANGE_TYPE)*
54     Map plots can only support ``Range1d`` types, not data ranges.
55 
56 1013 *(INCOMPATIBLE_POINT_DRAW_RENDERER)*
57     The ``PointDrawTool`` renderers may only reference ``XYGlyph`` models.
58 
59 1014 *(INCOMPATIBLE_BOX_EDIT_RENDERER)*
60     The ``BoxEditTool`` renderers may only reference ``Rect`` glyph models.
61 
62 1015 *(INCOMPATIBLE_POLY_DRAW_RENDERER)*
63     The ``PolyDrawTool`` renderers may only reference ``MultiLine`` and ``Patches`` glyph models.
64 
65 1016 *(INCOMPATIBLE_POLY_EDIT_RENDERER)*
66     The ``PolyEditTool`` renderers may only reference ``MultiLine`` and ``Patches`` glyph models.
67 
68 1017 *(INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER)*
69     The ``PolyEditTool`` vertex_renderer may only reference ``XYGlyph`` models.
70 
71 1018 *(NO_RANGE_TOOL_RANGES)*
72     The ``RangeTool`` must have at least one of ``x_range`` or ``y_range`` configured
73 
74 1019 *(DUPLICATE_FACTORS)*
75     ``FactorRange`` must specify a unique list of categorical factors for an axis.
76 
77 1020 *(BAD_EXTRA_RANGE_NAME)*
78     An extra range name is configured with a name that does not correspond to any range.
79 
80 1021 *(EQUAL_SLIDER_START_END)*
81     ``noUiSlider`` most have a nonequal start and end.
82 
83 1022 *(MIN_PREFERRED_MAX_WIDTH)*
84     Expected min_width <= width <= max_width
85 
86 1023 *(MIN_PREFERRED_MAX_HEIGHT)*
87     Expected min_height <= height <= max_height
88 
89 1024 *(CDSVIEW_FILTERS_WITH_CONNECTED)*
90     ``CDSView`` filters are not compatible with glyphs with connected topology suchs as Line and Patch.
91 
92 9999 *(EXT)*
93     Indicates that a custom error check has failed.
94 
95 '''
96 
97 #-----------------------------------------------------------------------------
98 # Boilerplate
99 #-----------------------------------------------------------------------------
100 import logging # isort:skip
101 log = logging.getLogger(__name__)
102 
103 #-----------------------------------------------------------------------------
104 # Imports
105 #-----------------------------------------------------------------------------
106 
107 #-----------------------------------------------------------------------------
108 # Globals and constants
109 #-----------------------------------------------------------------------------
110 
111 codes = {
112     1001: ("BAD_COLUMN_NAME",                                    "Glyph refers to nonexistent column name. This could either be due to a misspelling or typo, or due to an expected column being missing. "), # NOQA
113     1002: ("MISSING_GLYPH",                                      "Glyph renderer has no glyph set"),
114     1003: ("NO_SOURCE_FOR_GLYPH",                                "Glyph renderer has no data source"),
115     1004: ("REQUIRED_RANGE",                                     "A required Range object is missing"),
116     1005: ("MISSING_GOOGLE_API_KEY",                             "Google now requires API keys for all Google Maps usage"),
117     1006: ("NON_MATCHING_DATA_SOURCES_ON_LEGEND_ITEM_RENDERERS", "LegendItem.label is a field, but renderer data sources don't match"),
118     1007: ("MISSING_MERCATOR_DIMENSION",                         "Mercator Tickers and Formatters must have their dimension property set to 'lat' or 'lon'"),
119     1008: ("REQUIRED_SCALE",                                     "A required Scale object is missing"),
120     1009: ("INCOMPATIBLE_SCALE_AND_RANGE",                       "A Scale is incompatible with one or more ranges on the same plot dimension"),
121     1010: ("CDSVIEW_SOURCE_DOESNT_MATCH",                        "CDSView used by Glyph renderer must have a source that matches the Glyph renderer's data source"),
122     1011: ("MALFORMED_GRAPH_SOURCE",                             "The GraphSource is incorrectly configured"),
123     1012: ("INCOMPATIBLE_MAP_RANGE_TYPE",                        "Map plots can only support Range1d types, not data ranges"),
124     1013: ("INCOMPATIBLE_POINT_DRAW_RENDERER",                   "PointDrawTool renderers may only reference XYGlyph models"),
125     1014: ("INCOMPATIBLE_BOX_EDIT_RENDERER",                     "BoxEditTool renderers may only reference Rect glyph models"),
126     1015: ("INCOMPATIBLE_POLY_DRAW_RENDERER",                    "PolyDrawTool renderers may only reference MultiLine and Patches glyph models"),
127     1016: ("INCOMPATIBLE_POLY_EDIT_RENDERER",                    "PolyEditTool renderers may only reference MultiLine and Patches glyph models"),
128     1017: ("INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER",             "PolyEditTool vertex_renderer may only reference XYGlyph models"),
129     1018: ("NO_RANGE_TOOL_RANGES",                               "RangeTool must have at least one of x_range or y_range configured"),
130     1019: ("DUPLICATE_FACTORS",                                  "FactorRange must specicy a unique list of categorical factors for an axis"),
131     1020: ("BAD_EXTRA_RANGE_NAME",                               "An extra range name is configued with a name that does not correspond to any range"),
132     1021: ("EQUAL_SLIDER_START_END",                             "Slider 'start' and 'end' cannot be equal"),
133     1022: ("MIN_PREFERRED_MAX_WIDTH",                            "Expected min_width <= width <= max_width"),
134     1023: ("MIN_PREFERRED_MAX_HEIGHT",                           "Expected min_height <= height <= max_height"),
135     1024: ("CDSVIEW_FILTERS_WITH_CONNECTED",                     "CDSView filters are not compatible with glyphs with connected topology suchs as Line and Patch"),
136     9999: ("EXT",                                                "Custom extension reports error"),
137 }
138 
139 __all__ = ()
140 
141 #-----------------------------------------------------------------------------
142 # General API
143 #-----------------------------------------------------------------------------
144 
145 #-----------------------------------------------------------------------------
146 # Dev API
147 #-----------------------------------------------------------------------------
148 
149 #-----------------------------------------------------------------------------
150 # Private API
151 #-----------------------------------------------------------------------------
152 
153 #-----------------------------------------------------------------------------
154 # Code
155 #-----------------------------------------------------------------------------
156 
157 for code in codes:
158     exec("%s = %d" % (codes[code][0], code))
159
```
--- 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/core/validation/errors.py b/bokeh/core/validation/errors.py
--- a/bokeh/core/validation/errors.py
+++ b/bokeh/core/validation/errors.py
@@ -87,7 +87,7 @@
     Expected min_height <= height <= max_height
 
 1024 *(CDSVIEW_FILTERS_WITH_CONNECTED)*
-    ``CDSView`` filters are not compatible with glyphs with connected topology suchs as Line and Patch.
+    ``CDSView`` filters are not compatible with glyphs with connected topology such as Line or Patch.
 
 9999 *(EXT)*
     Indicates that a custom error check has failed.
@@ -127,12 +127,12 @@
     1016: ("INCOMPATIBLE_POLY_EDIT_RENDERER",                    "PolyEditTool renderers may only reference MultiLine and Patches glyph models"),
     1017: ("INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER",             "PolyEditTool vertex_renderer may only reference XYGlyph models"),
     1018: ("NO_RANGE_TOOL_RANGES",                               "RangeTool must have at least one of x_range or y_range configured"),
-    1019: ("DUPLICATE_FACTORS",                                  "FactorRange must specicy a unique list of categorical factors for an axis"),
+    1019: ("DUPLICATE_FACTORS",                                  "FactorRange must specify a unique list of categorical factors for an axis"),
     1020: ("BAD_EXTRA_RANGE_NAME",                               "An extra range name is configued with a name that does not correspond to any range"),
     1021: ("EQUAL_SLIDER_START_END",                             "Slider 'start' and 'end' cannot be equal"),
     1022: ("MIN_PREFERRED_MAX_WIDTH",                            "Expected min_width <= width <= max_width"),
     1023: ("MIN_PREFERRED_MAX_HEIGHT",                           "Expected min_height <= height <= max_height"),
-    1024: ("CDSVIEW_FILTERS_WITH_CONNECTED",                     "CDSView filters are not compatible with glyphs with connected topology suchs as Line and Patch"),
+    1024: ("CDSVIEW_FILTERS_WITH_CONNECTED",                     "CDSView filters are not compatible with glyphs with connected topology such as Line or Patch"),
     9999: ("EXT",                                                "Custom extension reports error"),
 }

{"golden_diff": "diff --git a/bokeh/core/validation/errors.py b/bokeh/core/validation/errors.py\n--- a/bokeh/core/validation/errors.py\n+++ b/bokeh/core/validation/errors.py\n@@ -87,7 +87,7 @@\n     Expected min_height <= height <= max_height\n \n 1024 *(CDSVIEW_FILTERS_WITH_CONNECTED)*\n-    ``CDSView`` filters are not compatible with glyphs with connected topology suchs as Line and Patch.\n+    ``CDSView`` filters are not compatible with glyphs with connected topology such as Line or Patch.\n \n 9999 *(EXT)*\n     Indicates that a custom error check has failed.\n@@ -127,12 +127,12 @@\n     1016: (\"INCOMPATIBLE_POLY_EDIT_RENDERER\",                    \"PolyEditTool renderers may only reference MultiLine and Patches glyph models\"),\n     1017: (\"INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER\",             \"PolyEditTool vertex_renderer may only reference XYGlyph models\"),\n     1018: (\"NO_RANGE_TOOL_RANGES\",                               \"RangeTool must have at least one of x_range or y_range configured\"),\n-    1019: (\"DUPLICATE_FACTORS\",                                  \"FactorRange must specicy a unique list of categorical factors for an axis\"),\n+    1019: (\"DUPLICATE_FACTORS\",                                  \"FactorRange must specify a unique list of categorical factors for an axis\"),\n     1020: (\"BAD_EXTRA_RANGE_NAME\",                               \"An extra range name is configued with a name that does not correspond to any range\"),\n     1021: (\"EQUAL_SLIDER_START_END\",                             \"Slider 'start' and 'end' cannot be equal\"),\n     1022: (\"MIN_PREFERRED_MAX_WIDTH\",                            \"Expected min_width <= width <= max_width\"),\n     1023: (\"MIN_PREFERRED_MAX_HEIGHT\",                           \"Expected min_height <= height <= max_height\"),\n-    1024: (\"CDSVIEW_FILTERS_WITH_CONNECTED\",                     \"CDSView filters are not compatible with glyphs with connected topology suchs as Line and Patch\"),\n+    1024: (\"CDSVIEW_FILTERS_WITH_CONNECTED\",                     \"CDSView filters are not compatible with glyphs with connected topology such as Line or Patch\"),\n     9999: (\"EXT\",                                                \"Custom extension reports error\"),\n }\n", "issue": "[BUG] Minor typos in validation error output for FactorRange and CDSView\n**Software version info**\r\nbokeh 2.0.0\r\nMozilla Firefox 74.0\r\nmacOS Catalina 10.15.3\r\n\r\n**Expected behavior:**\r\nValidation errors will have an output with correct spelling.\r\n\r\nExample one:\r\n\"FactorRange must specify a unique list of categorical factors for an axis\"\r\nExample two:\r\n\"CDSView filters are not compatible with glyphs with connected topology such as Line or Patch\"\r\n\r\n**Observed behavior:**\r\nValidation errors have an output with typos (see attached screenshot).\r\n\r\nExample one:\r\n\"FactorRange must **_specicy_** a unique list of categorical factors for an axis\"\r\nExample two:\r\n\"CDSView filters are not compatible with glyphs with connected topology **_suchs_** as Line **_and_** Patch\"\r\n\r\n**Complete, minimal, self-contained example code that reproduces the issue**\r\n\r\n**Example one:**\r\n```py\r\nfrom bokeh.io import output_notebook, show\r\nfrom bokeh.models import ColumnDataSource, FactorRange\r\nfrom bokeh.plotting import figure\r\n\r\noutput_notebook()\r\n\r\nfruits = ['Apples', 'Apples']\r\nyears = ['2015', '2016']\r\n\r\ndata = {'fruits' : fruits,\r\n        '2015'   : [2, 1],\r\n        '2016'   : [5, 3]}\r\n\r\nx = [ (fruit, year) for fruit in fruits for year in years ]\r\ncounts = sum(zip(data['2015'], data['2016']), ()) # like an hstack\r\n\r\nsource = ColumnDataSource(data=dict(x=x, counts=counts))\r\n\r\np = figure(x_range=FactorRange(*x), plot_height=250, title=\"Fruit Counts by Year\",\r\n           toolbar_location=None, tools=\"\")\r\n\r\np.vbar(x='x', top='counts', width=0.9, source=source)\r\n\r\nshow(p)\r\n\r\n```\r\n\r\n**Example two**\r\n```py\r\nfrom bokeh.layouts import row\r\nfrom bokeh.plotting import output_notebook, figure, show\r\nfrom bokeh.sampledata.autompg import autompg\r\nfrom bokeh.models import CDSView, GroupFilter\r\nfrom bokeh.models.sources import ColumnDataSource\r\noutput_notebook()\r\n\r\nautompg = autompg.assign(efficient=(autompg.mpg > 20).astype(str))\r\nautompg = autompg.groupby(['yr', 'efficient']).mpg.mean().reset_index()\r\nautompg = autompg.sort_values(['efficient', 'yr'])\r\nlist_p = []\r\nsource=ColumnDataSource(autompg)\r\nfor eff in ['True', 'False']:\r\n    filter_ = GroupFilter(column_name='efficient', group=eff)\r\n    view = CDSView(source=source, filters=[filter_])\r\n\r\n    list_p.append(figure(title=eff))\r\n    list_p[-1].line(x='yr', y='mpg', source=source, view=view)\r\n\r\nshow(row(list_p))\r\n```\r\n\r\n**Screenshots or screencasts of the bug in action**\r\nExample one:\r\n<img width=\"1052\" alt=\"Screen Shot 2020-04-01 at 11 12 20 PM\" src=\"https://user-images.githubusercontent.com/18173173/78207887-f42d7380-7470-11ea-853a-f7aa905f91d2.png\">\r\n\r\nExample two:\r\n<img width=\"1036\" alt=\"Screen Shot 2020-04-01 at 11 24 33 PM\" src=\"https://user-images.githubusercontent.com/18173173/78207888-f68fcd80-7470-11ea-9370-c048914aa6d8.png\">\n", "before_files": [{"content": "#-----------------------------------------------------------------------------\n# Copyright (c) 2012 - 2020, Anaconda, Inc., and Bokeh Contributors.\n# All rights reserved.\n#\n# The full license is in the file LICENSE.txt, distributed with this software.\n#-----------------------------------------------------------------------------\n''' These define the standard error codes and messages for Bokeh\nvalidation checks.\n\n1001 *(BAD_COLUMN_NAME)*\n    A glyph has a property set to a field name that does not correspond to any\n    column in the |GlyphRenderer|'s data source.\n\n1002 *(MISSING_GLYPH)*\n    A |GlyphRenderer| has no glyph configured.\n\n1003 *(NO_SOURCE_FOR_GLYPH)*\n    A |GlyphRenderer| has no data source configured.\n\n1004 *(REQUIRED_RANGE)*\n    A |Plot| is missing one or more required default ranges (will result in\n    blank plot).\n\n1005 *(MISSING_GOOGLE_API_KEY)*\n    Google Maps API now requires an API key for all use. See\n    https://developers.google.com/maps/documentation/javascript/get-api-key\n    for more information on how to obtain your own, to use for the\n    ``api_key`` property of your Google Map plot .\n\n1006 *(NON_MATCHING_DATA_SOURCES_ON_LEGEND_ITEM_RENDERERS)*\n    All data_sources on ``LegendItem.renderers`` must match when LegendItem.label\n    is type field.\n\n1007 *(MISSING_MERCATOR_DIMENSION)*\n    ``MercatorTicker`` and ``MercatorTickFormatter``models must have their\n    ``dimension`` property set to ``'lat'`` or ``'lon'``.\n\n1008 *(REQUIRED_SCALE)*\n    A |Scale| on is missing one or more required default scales (will result in\n    blank plot).\n\n1009 *(INCOMPATIBLE_SCALE_AND_RANGE)*\n    A |Scale| type is incompatible with one or more ranges on the same plot\n    dimension (will result in blank plot).\n\n1010 *(CDSVIEW_SOURCE_DOESNT_MATCH)*\n    A |GlyphRenderer| has a ``CDSView`` whose source doesn't match the ``GlyphRenderer``'s\n    data source.\n\n1011 *(MALFORMED_GRAPH_SOURCE)*\n    The ``GraphSource`` is incorrectly configured.\n\n1012 *(INCOMPATIBLE_MAP_RANGE_TYPE)*\n    Map plots can only support ``Range1d`` types, not data ranges.\n\n1013 *(INCOMPATIBLE_POINT_DRAW_RENDERER)*\n    The ``PointDrawTool`` renderers may only reference ``XYGlyph`` models.\n\n1014 *(INCOMPATIBLE_BOX_EDIT_RENDERER)*\n    The ``BoxEditTool`` renderers may only reference ``Rect`` glyph models.\n\n1015 *(INCOMPATIBLE_POLY_DRAW_RENDERER)*\n    The ``PolyDrawTool`` renderers may only reference ``MultiLine`` and ``Patches`` glyph models.\n\n1016 *(INCOMPATIBLE_POLY_EDIT_RENDERER)*\n    The ``PolyEditTool`` renderers may only reference ``MultiLine`` and ``Patches`` glyph models.\n\n1017 *(INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER)*\n    The ``PolyEditTool`` vertex_renderer may only reference ``XYGlyph`` models.\n\n1018 *(NO_RANGE_TOOL_RANGES)*\n    The ``RangeTool`` must have at least one of ``x_range`` or ``y_range`` configured\n\n1019 *(DUPLICATE_FACTORS)*\n    ``FactorRange`` must specify a unique list of categorical factors for an axis.\n\n1020 *(BAD_EXTRA_RANGE_NAME)*\n    An extra range name is configured with a name that does not correspond to any range.\n\n1021 *(EQUAL_SLIDER_START_END)*\n    ``noUiSlider`` most have a nonequal start and end.\n\n1022 *(MIN_PREFERRED_MAX_WIDTH)*\n    Expected min_width <= width <= max_width\n\n1023 *(MIN_PREFERRED_MAX_HEIGHT)*\n    Expected min_height <= height <= max_height\n\n1024 *(CDSVIEW_FILTERS_WITH_CONNECTED)*\n    ``CDSView`` filters are not compatible with glyphs with connected topology suchs as Line and Patch.\n\n9999 *(EXT)*\n    Indicates that a custom error check has failed.\n\n'''\n\n#-----------------------------------------------------------------------------\n# Boilerplate\n#-----------------------------------------------------------------------------\nimport logging # isort:skip\nlog = logging.getLogger(__name__)\n\n#-----------------------------------------------------------------------------\n# Imports\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Globals and constants\n#-----------------------------------------------------------------------------\n\ncodes = {\n    1001: (\"BAD_COLUMN_NAME\",                                    \"Glyph refers to nonexistent column name. This could either be due to a misspelling or typo, or due to an expected column being missing. \"), # NOQA\n    1002: (\"MISSING_GLYPH\",                                      \"Glyph renderer has no glyph set\"),\n    1003: (\"NO_SOURCE_FOR_GLYPH\",                                \"Glyph renderer has no data source\"),\n    1004: (\"REQUIRED_RANGE\",                                     \"A required Range object is missing\"),\n    1005: (\"MISSING_GOOGLE_API_KEY\",                             \"Google now requires API keys for all Google Maps usage\"),\n    1006: (\"NON_MATCHING_DATA_SOURCES_ON_LEGEND_ITEM_RENDERERS\", \"LegendItem.label is a field, but renderer data sources don't match\"),\n    1007: (\"MISSING_MERCATOR_DIMENSION\",                         \"Mercator Tickers and Formatters must have their dimension property set to 'lat' or 'lon'\"),\n    1008: (\"REQUIRED_SCALE\",                                     \"A required Scale object is missing\"),\n    1009: (\"INCOMPATIBLE_SCALE_AND_RANGE\",                       \"A Scale is incompatible with one or more ranges on the same plot dimension\"),\n    1010: (\"CDSVIEW_SOURCE_DOESNT_MATCH\",                        \"CDSView used by Glyph renderer must have a source that matches the Glyph renderer's data source\"),\n    1011: (\"MALFORMED_GRAPH_SOURCE\",                             \"The GraphSource is incorrectly configured\"),\n    1012: (\"INCOMPATIBLE_MAP_RANGE_TYPE\",                        \"Map plots can only support Range1d types, not data ranges\"),\n    1013: (\"INCOMPATIBLE_POINT_DRAW_RENDERER\",                   \"PointDrawTool renderers may only reference XYGlyph models\"),\n    1014: (\"INCOMPATIBLE_BOX_EDIT_RENDERER\",                     \"BoxEditTool renderers may only reference Rect glyph models\"),\n    1015: (\"INCOMPATIBLE_POLY_DRAW_RENDERER\",                    \"PolyDrawTool renderers may only reference MultiLine and Patches glyph models\"),\n    1016: (\"INCOMPATIBLE_POLY_EDIT_RENDERER\",                    \"PolyEditTool renderers may only reference MultiLine and Patches glyph models\"),\n    1017: (\"INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER\",             \"PolyEditTool vertex_renderer may only reference XYGlyph models\"),\n    1018: (\"NO_RANGE_TOOL_RANGES\",                               \"RangeTool must have at least one of x_range or y_range configured\"),\n    1019: (\"DUPLICATE_FACTORS\",                                  \"FactorRange must specicy a unique list of categorical factors for an axis\"),\n    1020: (\"BAD_EXTRA_RANGE_NAME\",                               \"An extra range name is configued with a name that does not correspond to any range\"),\n    1021: (\"EQUAL_SLIDER_START_END\",                             \"Slider 'start' and 'end' cannot be equal\"),\n    1022: (\"MIN_PREFERRED_MAX_WIDTH\",                            \"Expected min_width <= width <= max_width\"),\n    1023: (\"MIN_PREFERRED_MAX_HEIGHT\",                           \"Expected min_height <= height <= max_height\"),\n    1024: (\"CDSVIEW_FILTERS_WITH_CONNECTED\",                     \"CDSView filters are not compatible with glyphs with connected topology suchs as Line and Patch\"),\n    9999: (\"EXT\",                                                \"Custom extension reports error\"),\n}\n\n__all__ = ()\n\n#-----------------------------------------------------------------------------\n# General API\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Dev API\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Private API\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Code\n#-----------------------------------------------------------------------------\n\nfor code in codes:\n    exec(\"%s = %d\" % (codes[code][0], code))\n", "path": "bokeh/core/validation/errors.py"}], "after_files": [{"content": "#-----------------------------------------------------------------------------\n# Copyright (c) 2012 - 2020, Anaconda, Inc., and Bokeh Contributors.\n# All rights reserved.\n#\n# The full license is in the file LICENSE.txt, distributed with this software.\n#-----------------------------------------------------------------------------\n''' These define the standard error codes and messages for Bokeh\nvalidation checks.\n\n1001 *(BAD_COLUMN_NAME)*\n    A glyph has a property set to a field name that does not correspond to any\n    column in the |GlyphRenderer|'s data source.\n\n1002 *(MISSING_GLYPH)*\n    A |GlyphRenderer| has no glyph configured.\n\n1003 *(NO_SOURCE_FOR_GLYPH)*\n    A |GlyphRenderer| has no data source configured.\n\n1004 *(REQUIRED_RANGE)*\n    A |Plot| is missing one or more required default ranges (will result in\n    blank plot).\n\n1005 *(MISSING_GOOGLE_API_KEY)*\n    Google Maps API now requires an API key for all use. See\n    https://developers.google.com/maps/documentation/javascript/get-api-key\n    for more information on how to obtain your own, to use for the\n    ``api_key`` property of your Google Map plot .\n\n1006 *(NON_MATCHING_DATA_SOURCES_ON_LEGEND_ITEM_RENDERERS)*\n    All data_sources on ``LegendItem.renderers`` must match when LegendItem.label\n    is type field.\n\n1007 *(MISSING_MERCATOR_DIMENSION)*\n    ``MercatorTicker`` and ``MercatorTickFormatter``models must have their\n    ``dimension`` property set to ``'lat'`` or ``'lon'``.\n\n1008 *(REQUIRED_SCALE)*\n    A |Scale| on is missing one or more required default scales (will result in\n    blank plot).\n\n1009 *(INCOMPATIBLE_SCALE_AND_RANGE)*\n    A |Scale| type is incompatible with one or more ranges on the same plot\n    dimension (will result in blank plot).\n\n1010 *(CDSVIEW_SOURCE_DOESNT_MATCH)*\n    A |GlyphRenderer| has a ``CDSView`` whose source doesn't match the ``GlyphRenderer``'s\n    data source.\n\n1011 *(MALFORMED_GRAPH_SOURCE)*\n    The ``GraphSource`` is incorrectly configured.\n\n1012 *(INCOMPATIBLE_MAP_RANGE_TYPE)*\n    Map plots can only support ``Range1d`` types, not data ranges.\n\n1013 *(INCOMPATIBLE_POINT_DRAW_RENDERER)*\n    The ``PointDrawTool`` renderers may only reference ``XYGlyph`` models.\n\n1014 *(INCOMPATIBLE_BOX_EDIT_RENDERER)*\n    The ``BoxEditTool`` renderers may only reference ``Rect`` glyph models.\n\n1015 *(INCOMPATIBLE_POLY_DRAW_RENDERER)*\n    The ``PolyDrawTool`` renderers may only reference ``MultiLine`` and ``Patches`` glyph models.\n\n1016 *(INCOMPATIBLE_POLY_EDIT_RENDERER)*\n    The ``PolyEditTool`` renderers may only reference ``MultiLine`` and ``Patches`` glyph models.\n\n1017 *(INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER)*\n    The ``PolyEditTool`` vertex_renderer may only reference ``XYGlyph`` models.\n\n1018 *(NO_RANGE_TOOL_RANGES)*\n    The ``RangeTool`` must have at least one of ``x_range`` or ``y_range`` configured\n\n1019 *(DUPLICATE_FACTORS)*\n    ``FactorRange`` must specify a unique list of categorical factors for an axis.\n\n1020 *(BAD_EXTRA_RANGE_NAME)*\n    An extra range name is configured with a name that does not correspond to any range.\n\n1021 *(EQUAL_SLIDER_START_END)*\n    ``noUiSlider`` most have a nonequal start and end.\n\n1022 *(MIN_PREFERRED_MAX_WIDTH)*\n    Expected min_width <= width <= max_width\n\n1023 *(MIN_PREFERRED_MAX_HEIGHT)*\n    Expected min_height <= height <= max_height\n\n1024 *(CDSVIEW_FILTERS_WITH_CONNECTED)*\n    ``CDSView`` filters are not compatible with glyphs with connected topology such as Line or Patch.\n\n9999 *(EXT)*\n    Indicates that a custom error check has failed.\n\n'''\n\n#-----------------------------------------------------------------------------\n# Boilerplate\n#-----------------------------------------------------------------------------\nimport logging # isort:skip\nlog = logging.getLogger(__name__)\n\n#-----------------------------------------------------------------------------\n# Imports\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Globals and constants\n#-----------------------------------------------------------------------------\n\ncodes = {\n    1001: (\"BAD_COLUMN_NAME\",                                    \"Glyph refers to nonexistent column name. This could either be due to a misspelling or typo, or due to an expected column being missing. \"), # NOQA\n    1002: (\"MISSING_GLYPH\",                                      \"Glyph renderer has no glyph set\"),\n    1003: (\"NO_SOURCE_FOR_GLYPH\",                                \"Glyph renderer has no data source\"),\n    1004: (\"REQUIRED_RANGE\",                                     \"A required Range object is missing\"),\n    1005: (\"MISSING_GOOGLE_API_KEY\",                             \"Google now requires API keys for all Google Maps usage\"),\n    1006: (\"NON_MATCHING_DATA_SOURCES_ON_LEGEND_ITEM_RENDERERS\", \"LegendItem.label is a field, but renderer data sources don't match\"),\n    1007: (\"MISSING_MERCATOR_DIMENSION\",                         \"Mercator Tickers and Formatters must have their dimension property set to 'lat' or 'lon'\"),\n    1008: (\"REQUIRED_SCALE\",                                     \"A required Scale object is missing\"),\n    1009: (\"INCOMPATIBLE_SCALE_AND_RANGE\",                       \"A Scale is incompatible with one or more ranges on the same plot dimension\"),\n    1010: (\"CDSVIEW_SOURCE_DOESNT_MATCH\",                        \"CDSView used by Glyph renderer must have a source that matches the Glyph renderer's data source\"),\n    1011: (\"MALFORMED_GRAPH_SOURCE\",                             \"The GraphSource is incorrectly configured\"),\n    1012: (\"INCOMPATIBLE_MAP_RANGE_TYPE\",                        \"Map plots can only support Range1d types, not data ranges\"),\n    1013: (\"INCOMPATIBLE_POINT_DRAW_RENDERER\",                   \"PointDrawTool renderers may only reference XYGlyph models\"),\n    1014: (\"INCOMPATIBLE_BOX_EDIT_RENDERER\",                     \"BoxEditTool renderers may only reference Rect glyph models\"),\n    1015: (\"INCOMPATIBLE_POLY_DRAW_RENDERER\",                    \"PolyDrawTool renderers may only reference MultiLine and Patches glyph models\"),\n    1016: (\"INCOMPATIBLE_POLY_EDIT_RENDERER\",                    \"PolyEditTool renderers may only reference MultiLine and Patches glyph models\"),\n    1017: (\"INCOMPATIBLE_POLY_EDIT_VERTEX_RENDERER\",             \"PolyEditTool vertex_renderer may only reference XYGlyph models\"),\n    1018: (\"NO_RANGE_TOOL_RANGES\",                               \"RangeTool must have at least one of x_range or y_range configured\"),\n    1019: (\"DUPLICATE_FACTORS\",                                  \"FactorRange must specify a unique list of categorical factors for an axis\"),\n    1020: (\"BAD_EXTRA_RANGE_NAME\",                               \"An extra range name is configued with a name that does not correspond to any range\"),\n    1021: (\"EQUAL_SLIDER_START_END\",                             \"Slider 'start' and 'end' cannot be equal\"),\n    1022: (\"MIN_PREFERRED_MAX_WIDTH\",                            \"Expected min_width <= width <= max_width\"),\n    1023: (\"MIN_PREFERRED_MAX_HEIGHT\",                           \"Expected min_height <= height <= max_height\"),\n    1024: (\"CDSVIEW_FILTERS_WITH_CONNECTED\",                     \"CDSView filters are not compatible with glyphs with connected topology such as Line or Patch\"),\n    9999: (\"EXT\",                                                \"Custom extension reports error\"),\n}\n\n__all__ = ()\n\n#-----------------------------------------------------------------------------\n# General API\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Dev API\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Private API\n#-----------------------------------------------------------------------------\n\n#-----------------------------------------------------------------------------\n# Code\n#-----------------------------------------------------------------------------\n\nfor code in codes:\n    exec(\"%s = %d\" % (codes[code][0], code))\n", "path": "bokeh/core/validation/errors.py"}]}