docs: def date_of_birth(self, tzinfo=None, minimum_age=0, maximum_age=115):
          """
          Generate a random date of birth represented as a Date object,
          constrained by optional miminimum_age and maximum_age
          parameters.
  
          :param tzinfo Defaults to None.
          :param minimum_age Defaults to 0.
          :param maximum_age Defaults to 115.
  
          :example Date('1979-02-02')
          :return Date
          """
  
          if not isinstance(minimum_age, int):
              raise TypeError("minimum_age must be an integer.")
  
          if not isinstance(maximum_age, int):
              raise TypeError("maximum_age must be an integer.")
  
          if (maximum_age < 0):
              raise ValueError("maximum_age must be greater than or equal to zero.")
  
          if (minimum_age < 0):
              raise ValueError("minimum_age must be greater than or equal to zero.")
  
          if (minimum_age > maximum_age):
              raise ValueError("minimum_age must be less than or equal to maximum_age.")
  
          # In order to return the full range of possible dates of birth, add one
          # year to the potential age cap and subtract one day if we land on the
          # boundary.
  
          now = datetime.now(tzinfo).date()
          start_date = now.replace(year=now.year - (maximum_age+1))
          end_date = now.replace(year=now.year - minimum_age)
  
          dob = self.date_time_ad(tzinfo=tzinfo, start_datetime=start_date, end_datetime=end_date).date()
  
          return dob if dob != start_date else dob + timedelta(days=1)