def interpolate_holes(self):
<EOL>assert self.validated_a_period is True, '<STR_LIT>''<STR_LIT>'<EOL>mins_per_step = int(<NUM_LIT> / self.header.analysis_period.timestep)<EOL>new_datetimes = self.header.analysis_period.datetimes<EOL>new_values = []<EOL>i = <NUM_LIT:0><EOL>if new_datetimes[<NUM_LIT:0>] != self.datetimes[<NUM_LIT:0>]:<EOL><INDENT>n_steps = int((self.datetimes[<NUM_LIT:0>].moy - new_datetimes[<NUM_LIT:0>].moy) / mins_per_step)<EOL>new_values.extend([self._values[<NUM_LIT:0>]] * n_steps)<EOL>i = n_steps - <NUM_LIT:1><EOL><DEDENT>for j in xrange(len(self._values)):<EOL><INDENT>if new_datetimes[i] == self.datetimes[j]:  <EOL><INDENT>new_values.append(self._values[j])<EOL>i += <NUM_LIT:1><EOL><DEDENT>else:  <EOL><INDENT>n_steps = int((self.datetimes[j].moy - new_datetimes[i].moy)<EOL>/ mins_per_step)<EOL>intp_vals = self._xxrange(self._values[j - <NUM_LIT:1>], self._values[j], n_steps)<EOL>new_values.extend(list(intp_vals)[<NUM_LIT:1>:] + [self._values[j]])<EOL>i += n_steps<EOL><DEDENT><DEDENT>if len(new_values) != len(new_datetimes):<EOL><INDENT>n_steps = len(new_datetimes) - len(new_values)<EOL>new_values.extend([self._values[-<NUM_LIT:1>]] * n_steps)<EOL><DEDENT>return HourlyContinuousCollection(self.header.duplicate(), new_values)<EOL>
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.