code: def itermonthdates(cls, year, month):
          
          curday = NepDate.from_bs_date(year, month, 1)
          start_weekday = curday.weekday()
          # Start_weekday represents the number of days we have to pad
          for i in range(start_weekday, 0, -1):
              yield (curday - timedelta(days=i))
  
          for i in range(0, values.NEPALI_MONTH_DAY_DATA[year][month - 1]):
              if i > 0:
                  curday.day += 1
                  curday.en_date = curday.en_date + timedelta(days=1)
              # Create a new object and return it
              n_date = NepDate(curday.year, curday.month, curday.day)
              n_date.en_date = curday.en_date
              yield n_date
          # Now, curday points to the last day of the month. Check it's weekday
          # and return days from next month to complete the week
          last_weekday = curday.weekday()
          remain = 6 - last_weekday
  
          for i in range(1, remain + 1):
              yield (curday + timedelta(days=i))
docs: Returns an iterator for the month in a year
          This iterator will return all days (as NepDate objects) for the month
          and all days before the start of the month or after the end of the month
          that are required to get a complete week.