def _GroupByOmittedArg(self, signatures, i):
    'Group functions that are identical if you ignore one of the arguments.\n\n    Arguments:\n      signatures: A list of function signatures\n      i: The index of the argument to ignore during comparison.\n\n    Returns:\n      A list of tuples (signature, types). "signature" is a signature with\n      argument i omitted, "types" is the list of types that argument was\n      found to have. signatures that don\'t have argument i are represented\n      as (original, None).\n    '
    groups = collections.OrderedDict()
    for sig in signatures:
        if (i >= len(sig.params)):
            groups[sig] = None
            continue
        if (sig.params[i].mutated_type is not None):
            groups[sig] = None
            continue
        params = list(sig.params)
        param_i = params[i]
        params[i] = param_i.Replace(type=None)
        stripped_signature = sig.Replace(params=tuple(params))
        existing = groups.get(stripped_signature)
        if existing:
            existing.append(param_i.type)
        else:
            groups[stripped_signature] = [param_i.type]
    return groups.items()
Group functions that are identical if you ignore one of the arguments.

Arguments:
  signatures: A list of function signatures
  i: The index of the argument to ignore during comparison.

Returns:
  A list of tuples (signature, types). "signature" is a signature with
  argument i omitted, "types" is the list of types that argument was
  found to have. signatures that don't have argument i are represented
  as (original, None).
def _GroupByOmittedArg(self, signatures, i):
    'Group functions that are identical if you ignore one of the arguments.\n\n    Arguments:\n      signatures: A list of function signatures\n      i: The index of the argument to ignore during comparison.\n\n    Returns:\n      A list of tuples (signature, types). "signature" is a signature with\n      argument i omitted, "types" is the list of types that argument was\n      found to have. signatures that don\'t have argument i are represented\n      as (original, None).\n    '
    groups = collections.OrderedDict()
    for sig in signatures:
        if (i >= len(sig.params)):
            groups[sig] = None
            continue
        if (sig.params[i].mutated_type is not None):
            groups[sig] = None
            continue
        params = list(sig.params)
        param_i = params[i]
        params[i] = param_i.Replace(type=None)
        stripped_signature = sig.Replace(params=tuple(params))
        existing = groups.get(stripped_signature)
        if existing:
            existing.append(param_i.type)
        else:
            groups[stripped_signature] = [param_i.type]
    return groups.items()