def METHOD_NAME(op, left, right, predicates, **kwargs):
    op_type = type(op)
    try:
        how = constants.JOIN_TYPES[op_type]
    except KeyError:
        raise UnsupportedOperationError(f"{op_type.__name__} not supported")
    left_on, right_on = _construct_join_predicate_columns(op, predicates, **kwargs)
    df = pd.merge(
        left,
        right,
        how=how,
        left_on=left_on,
        right_on=right_on,
        suffixes=constants.JOIN_SUFFIXES,
    )
    return df