docs: def interpolate_holes(self):
          """Linearly interpolate over holes in this collection to make it continuous.
  
          Returns:
              continuous_collection: A HourlyContinuousCollection with the same data
                  as this collection but with missing data filled by means of a
                  linear interpolation.
          """
          # validate analysis_period and use the resulting period to generate datetimes
          assert self.validated_a_period is True, 'validated_a_period property must be' \
              ' True to use interpolate_holes(). Run validate_analysis_period().'
          mins_per_step = int(60 / self.header.analysis_period.timestep)
          new_datetimes = self.header.analysis_period.datetimes
          new_values = []
  
          # if the first steps are a hole, duplicate the first value.
          i = 0
          if new_datetimes[0] != self.datetimes[0]:
              n_steps = int((self.datetimes[0].moy - new_datetimes[0].moy) / mins_per_step)
              new_values.extend([self._values[0]] * n_steps)
              i = n_steps - 1
  
          # go through the values interpolating any holes.
          for j in xrange(len(self._values)):
              if new_datetimes[i] == self.datetimes[j]:  # there is no hole.
                  new_values.append(self._values[j])
                  i += 1
              else:  # there is a hole between this step and the previous step.
                  n_steps = int((self.datetimes[j].moy - new_datetimes[i].moy)
                                / mins_per_step)
                  intp_vals = self._xxrange(self._values[j - 1], self._values[j], n_steps)
                  new_values.extend(list(intp_vals)[1:] + [self._values[j]])
                  i += n_steps
  
          # if the last steps are a hole duplicate the last value.
          if len(new_values) != len(new_datetimes):
              n_steps = len(new_datetimes) - len(new_values)
              new_values.extend([self._values[-1]] * n_steps)
  
          # build the new continuous data collection.
          return HourlyContinuousCollection(self.header.duplicate(), new_values)