prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Tooltip doesn't support "image" key
  My understanding is that to render tooltips, Altair uses the `vega-tooltip` plugin. Per that project's [README](https://github.com/vega/vega-tooltip), one awesome feature that library has is the ability to render images as part of the tooltip with the image key. From the docs:
  
  > Supports special keys title (becomes the title of the tooltip) and image (used as the url for an embedded image)
  
  Using the tooltip without the `image` key is fine:
  
  ```
  mydata = pd.DataFrame.from_records([{'a': 1, 'b': 1}, {'a': 2, 'b': 2}])
  chart = alt.Chart(mydata).mark_circle().encode(
      x='a',
      y='b',
      tooltip=alt.Tooltip(['a'], title='My Cool Tooltip')
  ).interactive()
  
  display(chart)
  ```
  
  However, when I add the `image` key, it stops working:
  
  ```
  chart = alt.Chart(mydata).mark_circle().encode(
      x='a',
      y='b',
      tooltip=alt.Tooltip(['a'], title='My Cool Tooltip', image='https://picsum.photos/200')
  ).interactive()
  
  display(chart)
  ```
  
  ```
  SchemaValidationError: Invalid specification
  
          altair.vegalite.v4.schema.channels.Tooltip, validating 'additionalProperties'
  
          Additional properties are not allowed ('image' was unexpected)
  ```
  
  Maybe this feature is already supported but the schema is out of date? Thanks.
  
  ---
  
  Please follow these steps to make it more efficient to solve your issue:
  
  - [N/A] Since Altair is a Python wrapper around the Vega-Lite visualization grammar, [most bugs should be reported directly to Vega-Lite](https://github.com/vega/vega-lite/issues). You can click the Action Button of your Altair chart and "Open in Vega Editor" to create a reproducible Vega-Lite example and see if you get the same error in the Vega Editor.
  - [x] Search for duplicate issues.
  - [x] Use the latest version of Altair.
  - [x] Describe how to reproduce the bug and include the full code and data to reproduce it, ideally using a sample data set from `vega_datasets`.
  
  
  </issue>
  <code>
  [start of altair/examples/image_tooltip.py]
  1 """
  2 Image tooltip
  3 -------------
  4 This example shows how to render images in tooltips.
  5 Either URLs or local file paths can be used to reference
  6 the images.
  7 """
  8 # category: other charts
  9 
  10 import altair as alt
  11 import pandas as pd
  12 
  13 source = pd.DataFrame.from_records(
  14     [{'a': 1, 'b': 1, 'image': 'https://altair-viz.github.io/_static/altair-logo-light.png'},
  15      {'a': 2, 'b': 2, 'image': 'https://avatars.githubusercontent.com/u/11796929?s=200&v=4'}]
  16 )
  17 alt.Chart(source).mark_circle(size=200).encode(
  18     x='a',
  19     y='b',
  20     tooltip=['image']  # Must be a list for the image to render
  21 )
  22
  [end of altair/examples/image_tooltip.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/altair/examples/image_tooltip.py b/altair/examples/image_tooltip.py
  --- a/altair/examples/image_tooltip.py
  +++ b/altair/examples/image_tooltip.py
  @@ -3,7 +3,9 @@
   -------------
   This example shows how to render images in tooltips.
   Either URLs or local file paths can be used to reference
  -the images.
  +the images. To render the image, you must use the special
  +column name "image" in your data and pass it as a list to
  +the tooltip encoding.
   """
   # category: other charts
   
  @@ -17,5 +19,5 @@
   alt.Chart(source).mark_circle(size=200).encode(
       x='a',
       y='b',
  -    tooltip=['image']  # Must be a list for the image to render
  +    tooltip=['image']  # Must be a list containing a field called "image"
   )
  
verification_info: {"golden_diff": "diff --git a/altair/examples/image_tooltip.py b/altair/examples/image_tooltip.py\n--- a/altair/examples/image_tooltip.py\n+++ b/altair/examples/image_tooltip.py\n@@ -3,7 +3,9 @@\n -------------\n This example shows how to render images in tooltips.\n Either URLs or local file paths can be used to reference\n-the images.\n+the images. To render the image, you must use the special\n+column name \"image\" in your data and pass it as a list to\n+the tooltip encoding.\n \"\"\"\n # category: other charts\n \n@@ -17,5 +19,5 @@\n alt.Chart(source).mark_circle(size=200).encode(\n     x='a',\n     y='b',\n-    tooltip=['image']  # Must be a list for the image to render\n+    tooltip=['image']  # Must be a list containing a field called \"image\"\n )\n", "issue": "Tooltip doesn't support \"image\" key\nMy understanding is that to render tooltips, Altair uses the `vega-tooltip` plugin. Per that project's [README](https://github.com/vega/vega-tooltip), one awesome feature that library has is the ability to render images as part of the tooltip with the image key. From the docs:\r\n\r\n> Supports special keys title (becomes the title of the tooltip) and image (used as the url for an embedded image)\r\n\r\nUsing the tooltip without the `image` key is fine:\r\n\r\n```\r\nmydata = pd.DataFrame.from_records([{'a': 1, 'b': 1}, {'a': 2, 'b': 2}])\r\nchart = alt.Chart(mydata).mark_circle().encode(\r\n    x='a',\r\n    y='b',\r\n    tooltip=alt.Tooltip(['a'], title='My Cool Tooltip')\r\n).interactive()\r\n\r\ndisplay(chart)\r\n```\r\n\r\nHowever, when I add the `image` key, it stops working:\r\n\r\n```\r\nchart = alt.Chart(mydata).mark_circle().encode(\r\n    x='a',\r\n    y='b',\r\n    tooltip=alt.Tooltip(['a'], title='My Cool Tooltip', image='https://picsum.photos/200')\r\n).interactive()\r\n\r\ndisplay(chart)\r\n```\r\n\r\n```\r\nSchemaValidationError: Invalid specification\r\n\r\n        altair.vegalite.v4.schema.channels.Tooltip, validating 'additionalProperties'\r\n\r\n        Additional properties are not allowed ('image' was unexpected)\r\n```\r\n\r\nMaybe this feature is already supported but the schema is out of date? Thanks.\r\n\r\n---\r\n\r\nPlease follow these steps to make it more efficient to solve your issue:\r\n\r\n- [N/A] Since Altair is a Python wrapper around the Vega-Lite visualization grammar, [most bugs should be reported directly to Vega-Lite](https://github.com/vega/vega-lite/issues). You can click the Action Button of your Altair chart and \"Open in Vega Editor\" to create a reproducible Vega-Lite example and see if you get the same error in the Vega Editor.\r\n- [x] Search for duplicate issues.\r\n- [x] Use the latest version of Altair.\r\n- [x] Describe how to reproduce the bug and include the full code and data to reproduce it, ideally using a sample data set from `vega_datasets`.\r\n\n", "before_files": [{"content": "\"\"\"\nImage tooltip\n-------------\nThis example shows how to render images in tooltips.\nEither URLs or local file paths can be used to reference\nthe images.\n\"\"\"\n# category: other charts\n\nimport altair as alt\nimport pandas as pd\n\nsource = pd.DataFrame.from_records(\n    [{'a': 1, 'b': 1, 'image': 'https://altair-viz.github.io/_static/altair-logo-light.png'},\n     {'a': 2, 'b': 2, 'image': 'https://avatars.githubusercontent.com/u/11796929?s=200&v=4'}]\n)\nalt.Chart(source).mark_circle(size=200).encode(\n    x='a',\n    y='b',\n    tooltip=['image']  # Must be a list for the image to render\n)\n", "path": "altair/examples/image_tooltip.py"}]}