docs: def day_night_duration(
              self,
              daybreak: datetime.time = datetime.time(NORMAL_DAY_START_H),
              nightfall: datetime.time = datetime.time(NORMAL_DAY_END_H)) \
              -> Tuple[datetime.timedelta, datetime.timedelta]:
          """
          Returns a ``(day, night)`` tuple of ``datetime.timedelta`` objects
          giving the duration of this interval that falls into day and night
          respectively.
          """
          daytotal = datetime.timedelta()
          nighttotal = datetime.timedelta()
          startdate = self.start.date()
          enddate = self.end.date()
          ndays = (enddate - startdate).days + 1
          for i in range(ndays):
              date = startdate + datetime.timedelta(days=i)
              component = self.component_on_date(date)
              # ... an interval on a single day
              day = Interval.daytime(date, daybreak, nightfall)
              daypart = component.intersection(day)
              if daypart is not None:
                  daytotal += daypart.duration()
                  nighttotal += component.duration() - daypart.duration()
              else:
                  nighttotal += component.duration()
          return daytotal, nighttotal