# Buggy code
def _maybe_cast_slice_bound(self, label, side: str, kind):
    """
    If label is a string, cast it to datetime according to resolution.

    Parameters
    ----------
    label : object
    side : {'left', 'right'}
    kind : {'loc', 'getitem'} or None

    Returns
    -------
    label : object

    Notes
    -----
    Value of `side` parameter should be validated in caller.
    """
    assert kind in ["loc", "getitem", None]

    if is_float(label) or isinstance(label, time) or is_integer(label):
        self._invalid_indexer("slice", label)

    if isinstance(label, str):
        freq = getattr(self, "freqstr", getattr(self, "inferred_freq", None))
        parsed, reso = parsing.parse_time_string(label, freq)
        reso = Resolution.from_attrname(reso)
        lower, upper = self._parsed_string_to_bounds(reso, parsed)
        # lower, upper form the half-open interval:
        #   [parsed, parsed + 1 freq)
        # because label may be passed to searchsorted
        # the bounds need swapped if index is reverse sorted and has a
        # length > 1 (is_monotonic_decreasing gives True for empty
        # and length 1 index)
        if self._is_strictly_monotonic_decreasing and len(self) > 1:
            return upper if side == "left" else lower
        return lower if side == "left" else upper
    else:
        return label


# Traceback (TypeError)
In [1]: import pandas as pd, datetime as dt

In [2]: pd.__version__
Out[2]: '1.0.3'

In [3]: a = pd.DatetimeIndex(['2010-01-01', '2010-01-03'])

In [4]: a.slice_locs(dt.datetime(2010, 1, 1), dt.datetime(2010, 1, 3))
Out[4]: (0, 2)

In [5]: a.slice_locs(dt.datetime(2010, 1, 1), dt.datetime(2010, 1, 2))
Out[5]: (0, 1)

In [6]: a.slice_locs(dt.date(2010, 1, 1), dt.date(2010, 1, 3))
Out[6]: (0, 2)

In [7]: a.slice_locs(dt.date(2010, 1, 1), dt.date(2010, 1, 2))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

TypeError: an integer is required

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2645             try:
-> 2646                 return self._engine.get_loc(key)
2647             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine._date_check_type()

KeyError: datetime.date(2010, 1, 2)

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

TypeError: an integer is required

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/datetimes.py in get_loc(self, key, method, tolerance)
714         try:
--> 715             return Index.get_loc(self, key, method, tolerance)
716         except (KeyError, ValueError, TypeError):

~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2647             except KeyError:
-> 2648                 return self._engine.get_loc(self._maybe_cast_indexer(key))
2649         indexer = self.get_indexer([key], method=method, tolerance=tolerance)

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine._date_check_type()

KeyError: datetime.date(2010, 1, 2)

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 1262390400000000000

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2645             try:
-> 2646                 return self._engine.get_loc(key)
2647             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

KeyError: Timestamp('2010-01-02 00:00:00')

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 1262390400000000000

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/datetimes.py in get_loc(self, key, method, tolerance)
727                     stamp = stamp.tz_localize(self.tz)
--> 728                 return Index.get_loc(self, stamp, method, tolerance)
729             except KeyError:

~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
2647             except KeyError:
-> 2648                 return self._engine.get_loc(self._maybe_cast_indexer(key))
2649         indexer = self.get_indexer([key], method=method, tolerance=tolerance)

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.DatetimeEngine.get_loc()

KeyError: Timestamp('2010-01-02 00:00:00')

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_slice_bound(self, label, side, kind)
4840         try:
-> 4841             slc = self.get_loc(label)
4842         except KeyError as err:

~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/datetimes.py in get_loc(self, key, method, tolerance)
729             except KeyError:
--> 730                 raise KeyError(key)
731             except ValueError as e:

KeyError: datetime.date(2010, 1, 2)

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-7-f3a1babc1d65> in <module>
----> 1 a.slice_locs(dt.date(2010, 1, 1), dt.date(2010, 1, 2))

~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in slice_locs(self, start, end, step, kind)
4929         end_slice = None
4930         if end is not None:
-> 4931             end_slice = self.get_slice_bound(end, "right", kind)
4932         if end_slice is None:
4933             end_slice = len(self)

~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_slice_bound(self, label, side, kind)
4842         except KeyError as err:
4843             try:
-> 4844                 return self._searchsorted_monotonic(label, side)
4845             except ValueError:
4846                 # raise the original KeyError

~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/base.py in _searchsorted_monotonic(self, label, side)
4793     def _searchsorted_monotonic(self, label, side="left"):
4794         if self.is_monotonic_increasing:
-> 4795             return self.searchsorted(label, side=side)
4796         elif self.is_monotonic_decreasing:
4797             # np.searchsorted expects ascending sort order, have to reverse

~/.conda/envs/build/lib/python3.7/site-packages/pandas/core/indexes/datetimes.py in searchsorted(self, value, side, sorter)
858         elif not isinstance(value, DatetimeArray):
859             raise TypeError(
--> 860                 "searchsorted requires compatible dtype or scalar, "
861                 f"not {type(value).__name__}"
862             )

TypeError: searchsorted requires compatible dtype or scalar, not date

# Fixed code
def _maybe_cast_slice_bound(self, label, side: str, kind):
    """
    If label is a string, cast it to datetime according to resolution.

    Parameters
    ----------
    label : object
    side : {'left', 'right'}
    kind : {'loc', 'getitem'} or None

    Returns
    -------
    label : object

    Notes
    -----
    Value of `side` parameter should be validated in caller.
    """
    assert kind in ["loc", "getitem", None]

    if is_float(label) or isinstance(label, time) or is_integer(label):
        self._invalid_indexer("slice", label)

    if isinstance(label, str):
        freq = getattr(self, "freqstr", getattr(self, "inferred_freq", None))
        parsed, reso = parsing.parse_time_string(label, freq)
        reso = Resolution.from_attrname(reso)
        lower, upper = self._parsed_string_to_bounds(reso, parsed)
        # lower, upper form the half-open interval:
        #   [parsed, parsed + 1 freq)
        # because label may be passed to searchsorted
        # the bounds need swapped if index is reverse sorted and has a
        # length > 1 (is_monotonic_decreasing gives True for empty
        # and length 1 index)
        if self._is_strictly_monotonic_decreasing and len(self) > 1:
            return upper if side == "left" else lower
        return lower if side == "left" else upper
    return self._maybe_cast_for_get_loc(label)