docs: def check_calendar(self, ds):
          '''
          Check the calendar attribute for variables defining time and ensure it
          is a valid calendar prescribed by CF.
  
          CF §4.4.1 In order to calculate a new date and time given a base date, base
          time and a time increment one must know what calendar to use.
  
          The values currently defined for calendar are:
          - gregorian or standard
          - proleptic_gregorian
          - noleap or 365_day
          - all_leap or 366_day
          - 360_day
          - julian
          - none
  
          The calendar attribute may be set to none in climate experiments that
          simulate a fixed time of year.
          The time of year is indicated by the date in the reference time of the
          units attribute.
  
          If none of the calendars defined above applies, a non-standard calendar
          can be defined. The lengths of each month are explicitly defined with
          the month_lengths attribute of the time axis.
  
          If leap years are included, then two other attributes of the time axis
          should also be defined:
  
          leap_year, leap_month
  
          The calendar attribute is not required when a non-standard calendar is
          being used. It is sufficient to define the calendar using the
          month_lengths attribute, along with leap_year, and leap_month as
          appropriate. However, the calendar attribute is allowed to take
          non-standard values and in that case defining the non-standard calendar
          using the appropriate attributes is required.
  
          :param netCDF4.Dataset ds: An open netCDF dataset
          :rtype: list
          :return: List of results
          '''
          valid_calendars = [
              'gregorian',
              'standard',
              'proleptic_gregorian',
              'noleap',
              '365_day',
              'all_leap',
              '366_day',
              '360_day',
              'julian',
              'none'
          ]
  
          ret_val = []
  
          # if has a calendar, check that it is within the valid values
          # otherwise no calendar is valid
          for time_var in ds.get_variables_by_attributes(calendar=lambda c: c is not None):
              reasoning = None
              valid_calendar = time_var.calendar in valid_calendars
  
              if not valid_calendar:
                  reasoning = ["§4.4.1 Variable %s should have a valid calendar: '%s' is not a valid calendar" % (time_var.name, time_var.calendar)]
  
              # passes if the calendar is valid, otherwise notify of invalid
              # calendar
  
              result = Result(BaseCheck.LOW,
                              valid_calendar,
                              self.section_titles['4.4'],
                              reasoning)
              ret_val.append(result)
  
          return ret_val