(logical_line, tokens)
Avoid extraneous whitespace in the following situations:

    - Immediately before the open parenthesis that starts the argument
      list of a function call.

    - Immediately before the open parenthesis that starts an indexing or
      slicing.
Avoid extraneous whitespace in the following situations:
Avoid extraneous whitespace in the following situations :
def whitespace_before_parameters(logical_line, tokens):
    """
    Avoid extraneous whitespace in the following situations:

    - Immediately before the open parenthesis that starts the argument
      list of a function call.

    - Immediately before the open parenthesis that starts an indexing or
      slicing.
    """
    prev_type = tokens[0][0]
    prev_text = tokens[0][1]
    prev_end = tokens[0][3]
    for index in range(1, len(tokens)):
        token_type, text, start, end, line = tokens[index]
        if (token_type == tokenize.OP and
            text in '([' and
            start != prev_end and
            prev_type == tokenize.NAME and
            (index < 2 or tokens[index - 2][1] != 'class') and
            (not iskeyword(prev_text))):
            return prev_end, "E211 whitespace before '%s'" % text
        prev_type = token_type
        prev_text = text
        prev_end = end
def whitespace_before_parameters ( logical_line , tokens ) : prev_type = tokens [ 0 ] [ 0 ] prev_text = tokens [ 0 ] [ 1 ] prev_end = tokens [ 0 ] [ 3 ] for index in range ( 1 , len ( tokens ) ) : token_type , text , start , end , line = tokens [ index ] if ( token_type == tokenize . OP and text in '([' and start != prev_end and prev_type == tokenize . NAME and ( index < 2 or tokens [ index - 2 ] [ 1 ] != 'class' ) and ( not iskeyword ( prev_text ) ) ) : return prev_end , "E211 whitespace before '%s'" % text prev_type = token_type prev_text = text prev_end = end