class_docstr: Abstract interface to create holidays following certain rules.
docstr: Returns a curve with holidays between start_date and end_date
  
  Parameters
  ----------
  start : starting date, datetime-like, optional
  end : ending date, datetime-like, optional
  return_name : bool, optional
      If True, return a series that has dates and holiday names.
      False will only return a DatetimeIndex of dates.
  
  Returns
  -------
      DatetimeIndex of holidays
code: def holidays(self, start=None, end=None, return_name: bool = False):
      """
      Returns a curve with holidays between start_date and end_date
  
      Parameters
      ----------
      start : starting date, datetime-like, optional
      end : ending date, datetime-like, optional
      return_name : bool, optional
          If True, return a series that has dates and holiday names.
          False will only return a DatetimeIndex of dates.
  
      Returns
      -------
          DatetimeIndex of holidays
      """
      if self.rules is None:
          raise Exception(
              f"Holiday Calendar {self.name} does not have any rules specified"
          )
  
      if start is None:
          start = AbstractHolidayCalendar.start_date
  
      if end is None:
          end = AbstractHolidayCalendar.end_date
  
      start = Timestamp(start)
      end = Timestamp(end)
  
      # If we don't have a cache or the dates are outside the prior cache, we
      # get them again
      if (
          self._cache is None
          or start < self._cache[0]
          or end > self._cache[1]
      ):
          pre_holidays = [
              rule.dates(start, end, return_name=True)
              for rule in self.rules
          ]
          if pre_holidays:
              # error: Argument 1 to "concat" has incompatible type
              # "List[Union[Series, DatetimeIndex]]"; expected
              # "Union[Iterable[DataFrame], Mapping[<nothing>, DataFrame]]"
              holidays = concat(pre_holidays)  # type: ignore[arg-type]
          else:
              # error: Incompatible types in assignment (expression has type
              # "Series", variable has type "DataFrame")
              holidays = Series(index=DatetimeIndex([]), dtype=object)  # type: ignore[assignment]
  
          self._cache = (start, end, holidays.sort_index())
  
      holidays = self._cache[2]
      holidays = holidays[start:end]
  
      if return_name:
          return holidays
      else:
          return holidays.index
  
imports: from __future__ import annotations
  from datetime import datetime, timedelta
  import warnings
  from dateutil.relativedelta import FR, MO, SA, SU, TH, TU, WE
  import numpy
  from pandas.errors import PerformanceWarning
  from pandas import DateOffset, DatetimeIndex, Series, Timestamp, concat, date_range
  from pandas.tseries.offsets import Day, Easter
label_desc: Use image node_id 3 for calling the AbstractHolidayCalendar obj's underlying member method code with example usage: obj.holidays(start, end, return_name) and returns: holidays, holidays