'Build a line from tokens and run all logical checks on it.'

def check_logical(self):

    options.counters['logical    lines'] = (options.counters.get('logical    lines', 0) + 1)
    self.build_tokens_line()
    first_line = self.lines[(self.mapping[0][1][2][0] - 1)]
    indent = first_line[:self.mapping[0][1][2][1]]
    self.previous_indent_level = self.indent_level
    self.indent_level = expand_indent(indent)
    if (options.verbose >= 2):
        print self.logical_line[:80].rstrip()
    for (name, check, argument_names) in self.logical_checks:
        if (options.verbose >= 3):
            print '            ', name
        result = self.run_check(check, argument_names)
        if (result is not None):
            (offset, text) = result
            if (type(offset) is tuple):
                (original_number, original_offset) = offset
            else:
                for (token_offset, token) in self.mapping:
                    if (offset >= token_offset):
                        original_number = token[2][0]
                        original_offset = ((token[2][1] + offset) - token_offset)
            self.report_error(original_number, original_offset, text, check)
    self.previous_logical = self.logical_line
