prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Cannot style minor ticks
  Axis objects do not have minor tick properties.
  
  
  </issue>
  <code>
  [start of bokeh/models/axes.py]
  1 from __future__ import absolute_import
  2 
  3 from ..properties import Int, Float, String, Enum, Instance, Tuple, Either, Include
  4 from ..mixins import LineProps, TextProps
  5 from ..enums import Location
  6 
  7 from .renderers import GuideRenderer
  8 from .tickers import Ticker, BasicTicker, LogTicker, CategoricalTicker, DatetimeTicker
  9 from .formatters import TickFormatter, BasicTickFormatter, LogTickFormatter, CategoricalTickFormatter, DatetimeTickFormatter
  10 
  11 class Axis(GuideRenderer):
  12     location = Either(Enum('auto'), Enum(Location))
  13     bounds = Either(Enum('auto'), Tuple(Float, Float))
  14 
  15     x_range_name = String('default')
  16     y_range_name = String('default')
  17 
  18     ticker = Instance(Ticker)
  19     formatter = Instance(TickFormatter)
  20 
  21     axis_label = String
  22     axis_label_standoff = Int
  23     axis_label_props = Include(TextProps)
  24 
  25     major_label_standoff = Int
  26     major_label_orientation = Either(Enum("horizontal", "vertical"), Float)
  27     major_label_props = Include(TextProps)
  28 
  29     axis_props = Include(LineProps)
  30     major_tick_props = Include(LineProps)
  31 
  32     major_tick_in = Int
  33     major_tick_out = Int
  34 
  35 class ContinuousAxis(Axis):
  36     pass
  37 
  38 class LinearAxis(ContinuousAxis):
  39     def __init__(self, ticker=None, formatter=None, **kwargs):
  40         if ticker is None:
  41             ticker = BasicTicker()
  42         if formatter is None:
  43             formatter = BasicTickFormatter()
  44         super(LinearAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)
  45 
  46 class LogAxis(ContinuousAxis):
  47     def __init__(self, ticker=None, formatter=None, **kwargs):
  48         if ticker is None:
  49             ticker = LogTicker(num_minor_ticks=10)
  50         if formatter is None:
  51             formatter = LogTickFormatter()
  52         super(LogAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)
  53 
  54 class CategoricalAxis(Axis):
  55     def __init__(self, ticker=None, formatter=None, **kwargs):
  56         if ticker is None:
  57             ticker = CategoricalTicker()
  58         if formatter is None:
  59             formatter = CategoricalTickFormatter()
  60         super(CategoricalAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)
  61 
  62 class DatetimeAxis(LinearAxis):
  63     axis_label = String("date")
  64     scale = String("time")
  65     num_labels = Int(8)
  66     char_width = Int(10)
  67     fill_ratio = Float(0.3)
  68 
  69     def __init__(self, ticker=None, formatter=None, **kwargs):
  70         if ticker is None:
  71             ticker = DatetimeTicker()
  72         if formatter is None:
  73             formatter = DatetimeTickFormatter()
  74         super(DatetimeAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)
  75
  [end of bokeh/models/axes.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/bokeh/models/axes.py b/bokeh/models/axes.py
  --- a/bokeh/models/axes.py
  +++ b/bokeh/models/axes.py
  @@ -27,11 +27,15 @@
       major_label_props = Include(TextProps)
   
       axis_props = Include(LineProps)
  -    major_tick_props = Include(LineProps)
   
  +    major_tick_props = Include(LineProps)
       major_tick_in = Int
       major_tick_out = Int
   
  +    minor_tick_props = Include(LineProps)
  +    minor_tick_in = Int
  +    minor_tick_out = Int
  +
   class ContinuousAxis(Axis):
       pass
  
verification_info: {"golden_diff": "diff --git a/bokeh/models/axes.py b/bokeh/models/axes.py\n--- a/bokeh/models/axes.py\n+++ b/bokeh/models/axes.py\n@@ -27,11 +27,15 @@\n     major_label_props = Include(TextProps)\n \n     axis_props = Include(LineProps)\n-    major_tick_props = Include(LineProps)\n \n+    major_tick_props = Include(LineProps)\n     major_tick_in = Int\n     major_tick_out = Int\n \n+    minor_tick_props = Include(LineProps)\n+    minor_tick_in = Int\n+    minor_tick_out = Int\n+\n class ContinuousAxis(Axis):\n     pass\n", "issue": "Cannot style minor ticks\nAxis objects do not have minor tick properties.\n\n", "before_files": [{"content": "from __future__ import absolute_import\n\nfrom ..properties import Int, Float, String, Enum, Instance, Tuple, Either, Include\nfrom ..mixins import LineProps, TextProps\nfrom ..enums import Location\n\nfrom .renderers import GuideRenderer\nfrom .tickers import Ticker, BasicTicker, LogTicker, CategoricalTicker, DatetimeTicker\nfrom .formatters import TickFormatter, BasicTickFormatter, LogTickFormatter, CategoricalTickFormatter, DatetimeTickFormatter\n\nclass Axis(GuideRenderer):\n    location = Either(Enum('auto'), Enum(Location))\n    bounds = Either(Enum('auto'), Tuple(Float, Float))\n\n    x_range_name = String('default')\n    y_range_name = String('default')\n\n    ticker = Instance(Ticker)\n    formatter = Instance(TickFormatter)\n\n    axis_label = String\n    axis_label_standoff = Int\n    axis_label_props = Include(TextProps)\n\n    major_label_standoff = Int\n    major_label_orientation = Either(Enum(\"horizontal\", \"vertical\"), Float)\n    major_label_props = Include(TextProps)\n\n    axis_props = Include(LineProps)\n    major_tick_props = Include(LineProps)\n\n    major_tick_in = Int\n    major_tick_out = Int\n\nclass ContinuousAxis(Axis):\n    pass\n\nclass LinearAxis(ContinuousAxis):\n    def __init__(self, ticker=None, formatter=None, **kwargs):\n        if ticker is None:\n            ticker = BasicTicker()\n        if formatter is None:\n            formatter = BasicTickFormatter()\n        super(LinearAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)\n\nclass LogAxis(ContinuousAxis):\n    def __init__(self, ticker=None, formatter=None, **kwargs):\n        if ticker is None:\n            ticker = LogTicker(num_minor_ticks=10)\n        if formatter is None:\n            formatter = LogTickFormatter()\n        super(LogAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)\n\nclass CategoricalAxis(Axis):\n    def __init__(self, ticker=None, formatter=None, **kwargs):\n        if ticker is None:\n            ticker = CategoricalTicker()\n        if formatter is None:\n            formatter = CategoricalTickFormatter()\n        super(CategoricalAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)\n\nclass DatetimeAxis(LinearAxis):\n    axis_label = String(\"date\")\n    scale = String(\"time\")\n    num_labels = Int(8)\n    char_width = Int(10)\n    fill_ratio = Float(0.3)\n\n    def __init__(self, ticker=None, formatter=None, **kwargs):\n        if ticker is None:\n            ticker = DatetimeTicker()\n        if formatter is None:\n            formatter = DatetimeTickFormatter()\n        super(DatetimeAxis, self).__init__(ticker=ticker, formatter=formatter, **kwargs)\n", "path": "bokeh/models/axes.py"}]}