prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Clearing value of a DatetimePicker
  #### Description of expected behavior and the observed behavior
  Not sure if this is a bug or a new feature to Panel. Let's say I have a layout consisting of a button named "Edit", a DatetimePicker disabled with no default value, and a button named "Submit". At the time of initialization, the value of DatetimePicker is Null. The way these objects interact is as follows:
  - Click "Edit" button, DatetimePicker is enabled so user can select a specific time value.
  - Click "Submit" button, the selected time value will be pushed to the DB, and the DatetimePicker will be disabled and reset back to Null.
  
  I have tried several ways with no success in clearing the value of the DatetimePicker.
  
  #### Complete, minimal, self-contained example code that reproduces the issue
  
  ```
  time_widget = pn.widgets.DatetimePicker(disabled=True)
  time_widget.value = now()
  
  # how to set value back to None?
  time_widget.value = None/pandas.NaT/np.nan => all causes error
  ```
  
  
  </issue>
  <code>
  [start of panel/models/datetime_picker.py]
  1 from bokeh.core.enums import CalendarPosition
  2 from bokeh.core.properties import (
  3     Bool, Date, Datetime, Either, Enum, List, Nullable, String, Tuple,
  4 )
  5 from bokeh.models.widgets.inputs import InputWidget
  6 
  7 
  8 class DatetimePicker(InputWidget):
  9     ''' Calendar-based date picker widget.
  10 
  11     '''
  12 
  13     value = String(help="""
  14     The initial or picked date.
  15     """)
  16 
  17     min_date = Nullable(Either(Date, Datetime), help="""
  18     Optional earliest allowable date.
  19     """)
  20 
  21     max_date = Nullable(Either(Date, Datetime), help="""
  22     Optional latest allowable date.
  23     """)
  24 
  25     disabled_dates = List(Either(Date, Datetime, Tuple(Date, Date), Tuple(Datetime, Datetime)), default=[], help="""
  26     A list of dates of ``(start, end)`` date ranges to make unavailable for
  27     selection. All other dates will be avalable.
  28 
  29     .. note::
  30         Only one of ``disabled_dates`` and ``enabled_dates`` should be specified.
  31     """)
  32 
  33     enabled_dates = List(Either(Date, Datetime, Tuple(Date, Date), Tuple(Datetime, Datetime)), default=[], help="""
  34     A list of dates of ``(start, end)`` date ranges to make available for
  35     selection. All other dates will be unavailable.
  36 
  37     .. note::
  38         Only one of ``disabled_dates`` and ``enabled_dates`` should be specified.
  39     """)
  40 
  41     position = Enum(CalendarPosition, default="auto", help="""
  42     Where the calendar is rendered relative to the input when ``inline`` is False.
  43     """)
  44 
  45     inline = Bool(default=False, help="""
  46     Whether the calendar sholud be displayed inline.
  47     """)
  48 
  49     enable_time = Bool(default=True)
  50 
  51     enable_seconds = Bool(default=True)
  52 
  53     military_time = Bool(default=True)
  54 
  55     date_format = String("Y-m-d H:i:S")
  56 
  57     mode = String(default="single", help="""
  58     Should either be "single" or "range".""")
  59
  [end of panel/models/datetime_picker.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/panel/models/datetime_picker.py b/panel/models/datetime_picker.py
  --- a/panel/models/datetime_picker.py
  +++ b/panel/models/datetime_picker.py
  @@ -10,7 +10,7 @@
   
       '''
   
  -    value = String(help="""
  +    value = Nullable(String, help="""
       The initial or picked date.
       """)
  
verification_info: {"golden_diff": "diff --git a/panel/models/datetime_picker.py b/panel/models/datetime_picker.py\n--- a/panel/models/datetime_picker.py\n+++ b/panel/models/datetime_picker.py\n@@ -10,7 +10,7 @@\n \n     '''\n \n-    value = String(help=\"\"\"\n+    value = Nullable(String, help=\"\"\"\n     The initial or picked date.\n     \"\"\")\n", "issue": "Clearing value of a DatetimePicker\n#### Description of expected behavior and the observed behavior\r\nNot sure if this is a bug or a new feature to Panel. Let's say I have a layout consisting of a button named \"Edit\", a DatetimePicker disabled with no default value, and a button named \"Submit\". At the time of initialization, the value of DatetimePicker is Null. The way these objects interact is as follows:\r\n- Click \"Edit\" button, DatetimePicker is enabled so user can select a specific time value.\r\n- Click \"Submit\" button, the selected time value will be pushed to the DB, and the DatetimePicker will be disabled and reset back to Null.\r\n\r\nI have tried several ways with no success in clearing the value of the DatetimePicker.\r\n\r\n#### Complete, minimal, self-contained example code that reproduces the issue\r\n\r\n```\r\ntime_widget = pn.widgets.DatetimePicker(disabled=True)\r\ntime_widget.value = now()\r\n\r\n# how to set value back to None?\r\ntime_widget.value = None/pandas.NaT/np.nan => all causes error\r\n```\r\n\n", "before_files": [{"content": "from bokeh.core.enums import CalendarPosition\nfrom bokeh.core.properties import (\n    Bool, Date, Datetime, Either, Enum, List, Nullable, String, Tuple,\n)\nfrom bokeh.models.widgets.inputs import InputWidget\n\n\nclass DatetimePicker(InputWidget):\n    ''' Calendar-based date picker widget.\n\n    '''\n\n    value = String(help=\"\"\"\n    The initial or picked date.\n    \"\"\")\n\n    min_date = Nullable(Either(Date, Datetime), help=\"\"\"\n    Optional earliest allowable date.\n    \"\"\")\n\n    max_date = Nullable(Either(Date, Datetime), help=\"\"\"\n    Optional latest allowable date.\n    \"\"\")\n\n    disabled_dates = List(Either(Date, Datetime, Tuple(Date, Date), Tuple(Datetime, Datetime)), default=[], help=\"\"\"\n    A list of dates of ``(start, end)`` date ranges to make unavailable for\n    selection. All other dates will be avalable.\n\n    .. note::\n        Only one of ``disabled_dates`` and ``enabled_dates`` should be specified.\n    \"\"\")\n\n    enabled_dates = List(Either(Date, Datetime, Tuple(Date, Date), Tuple(Datetime, Datetime)), default=[], help=\"\"\"\n    A list of dates of ``(start, end)`` date ranges to make available for\n    selection. All other dates will be unavailable.\n\n    .. note::\n        Only one of ``disabled_dates`` and ``enabled_dates`` should be specified.\n    \"\"\")\n\n    position = Enum(CalendarPosition, default=\"auto\", help=\"\"\"\n    Where the calendar is rendered relative to the input when ``inline`` is False.\n    \"\"\")\n\n    inline = Bool(default=False, help=\"\"\"\n    Whether the calendar sholud be displayed inline.\n    \"\"\")\n\n    enable_time = Bool(default=True)\n\n    enable_seconds = Bool(default=True)\n\n    military_time = Bool(default=True)\n\n    date_format = String(\"Y-m-d H:i:S\")\n\n    mode = String(default=\"single\", help=\"\"\"\n    Should either be \"single\" or \"range\".\"\"\")\n", "path": "panel/models/datetime_picker.py"}]}