nodes: 0, module; 1, function_definition; 2, function_name:_get_log_entries; 3, parameters; 4, type; 5, block; 6, identifier:self; 7, generic_type; 8, expression_statement; 9, if_statement; 10, identifier:List; 11, type_parameter; 12, comment:"""
          Return the log entries for this computation and its children.
  
          They are sorted in the same order they were emitted during the transaction processing, and
          include the sequential counter as the first element of the tuple representing every entry.
          """; 13, attribute; 14, block; 15, else_clause; 16, type; 17, identifier:self; 18, identifier:is_error; 19, return_statement; 20, block; 21, generic_type; 22, list; 23, return_statement; 24, identifier:Tuple; 25, type_parameter; 26, call; 27, type; 28, type; 29, type; 30, type; 31, identifier:sorted; 32, argument_list; 33, identifier:int; 34, identifier:bytes; 35, generic_type; 36, identifier:bytes; 37, call; 38, identifier:List; 39, type_parameter; 40, attribute; 41, argument_list; 42, type; 43, identifier:itertools; 44, identifier:chain; 45, attribute; 46, list_splat; 47, identifier:int; 48, identifier:self; 49, identifier:_log_entries; 50, generator_expression; 51, call; 52, for_in_clause; 53, attribute; 54, argument_list; 55, identifier:child; 56, attribute; 57, identifier:child; 58, identifier:_get_log_entries; 59, identifier:self; 60, identifier:children
code: def _get_log_entries(self) -> List[Tuple[int, bytes, List[int], bytes]]:
          """
          Return the log entries for this computation and its children.
  
          They are sorted in the same order they were emitted during the transaction processing, and
          include the sequential counter as the first element of the tuple representing every entry.
          """
          if self.is_error:
              return []
          else:
              return sorted(itertools.chain(
                  self._log_entries,
                  *(child._get_log_entries() for child in self.children)
              ))