@property<EOL><INDENT>@auto_memoize<EOL>def time_stops(self):<DEDENT>
if not self.supports_time:<EOL><INDENT>return []<EOL><DEDENT>if self.service.calendar == '<STR_LIT>':<EOL><INDENT>units = self.service.time_interval_units<EOL>interval = self.service.time_interval<EOL>steps = [self.time_start]<EOL>if units in ('<STR_LIT>', '<STR_LIT>', '<STR_LIT>'):<EOL><INDENT>if units == '<STR_LIT>':<EOL><INDENT>years = interval<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>years = <NUM_LIT:10> * interval<EOL><DEDENT>else:<EOL><INDENT>years = <NUM_LIT:100> * interval<EOL><DEDENT>next_value = lambda x: x.replace(year=x.year + years)<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>def _fn(x):<EOL><INDENT>year = x.year + (x.month+interval-<NUM_LIT:1>) // <NUM_LIT:12><EOL>month = (x.month+interval) % <NUM_LIT:12> or <NUM_LIT:12><EOL>day = min(x.day, calendar.monthrange(year, month)[<NUM_LIT:1>])<EOL>return x.replace(year=year, month=month, day=day)<EOL><DEDENT>next_value = _fn<EOL><DEDENT>else:<EOL><INDENT>if units == '<STR_LIT>':<EOL><INDENT>delta = timedelta(milliseconds=interval)<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>delta = timedelta(seconds=interval)<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>delta = timedelta(minutes=interval)<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>delta = timedelta(hours=interval)<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>delta = timedelta(days=interval)<EOL><DEDENT>elif units == '<STR_LIT>':<EOL><INDENT>delta = timedelta(weeks=interval)<EOL><DEDENT>else:<EOL><INDENT>raise ValidationError(<EOL>"<STR_LIT>".format(self.service.time_interval_units)<EOL>)<EOL><DEDENT>next_value = lambda x: x + delta<EOL><DEDENT>while steps[-<NUM_LIT:1>] < self.time_end:<EOL><INDENT>value = next_value(steps[-<NUM_LIT:1>])<EOL>if value > self.time_end:<EOL><INDENT>break<EOL><DEDENT>steps.append(value)<EOL><DEDENT>return steps<EOL><DEDENT>else:<EOL><INDENT>raise NotImplementedError<EOL><DEDENT>
Valid time steps for this service as a list of datetime objects.