<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def whitespace_around_named_parameter_equals(logical_line, tokens):
 r"""Don't use spaces around the '=' sign in function arguments. Don't use spaces around the '=' sign when used to indicate a keyword argument or a default parameter value. Okay: def complex(real, imag=0.0):
 Okay: return magic(r=real, i=imag) Okay: boolean(a == b) Okay: boolean(a != b) Okay: boolean(a <= b) Okay: boolean(a >= b) Okay: def foo(arg: int = 42):
 Okay: async def foo(arg: int = 42):
 E251: def complex(real, imag = 0.0):
 E251: return magic(r = real, i = imag) """

    parens = 0
    no_space = False
    prev_end = None
    annotated_func_arg = False
    in_def = bool(STARTSWITH_DEF_REGEX.match(logical_line))
    message = "E251 unexpected spaces around keyword / parameter equals"
    for token_type, text, start, end, line in tokens:
        if token_type == tokenize.NL:
            continue
        if no_space:
            no_space = False
            if start != prev_end:
                yield (prev_end, message)
        if token_type == tokenize.OP:
            if text in '([':
                parens += 1
            elif text in ')]':
                parens -= 1
            elif in_def and text == ':' and parens == 1:
                annotated_func_arg = True
            elif parens and text == ',' and parens == 1:
                annotated_func_arg = False
            elif parens and text == '=' and not annotated_func_arg:
                no_space = True
                if start != prev_end:
                    yield (prev_end, message)
            if not parens:
                annotated_func_arg = False

        prev_end = end