nodes: 0, module; 1, function_definition; 2, function_name:missing_datetimes; 3, parameters; 4, block; 5, identifier:self; 6, identifier:finite_datetimes; 7, expression_statement; 8, return_statement; 9, comment:"""
          Override in subclasses to do bulk checks.
  
          Returns a sorted list.
  
          This is a conservative base implementation that brutally checks completeness, instance by instance.
  
          Inadvisable as it may be slow.
          """; 10, list_comprehension; 11, identifier:d; 12, for_in_clause; 13, if_clause; 14, identifier:d; 15, identifier:finite_datetimes; 16, not_operator; 17, call; 18, attribute; 19, argument_list; 20, call; 21, identifier:complete; 22, attribute; 23, argument_list; 24, identifier:self; 25, identifier:_instantiate_task_cls; 26, call; 27, attribute; 28, argument_list; 29, identifier:self; 30, identifier:datetime_to_parameter; 31, identifier:d
code: def missing_datetimes(self, finite_datetimes):
          """
          Override in subclasses to do bulk checks.
  
          Returns a sorted list.
  
          This is a conservative base implementation that brutally checks completeness, instance by instance.
  
          Inadvisable as it may be slow.
          """
          return [d for d in finite_datetimes if not self._instantiate_task_cls(self.datetime_to_parameter(d)).complete()]