@not_implemented_for('undirected')
@not_implemented_for('multigraph')
def is_tournament(G):
    """Returns True if and only if `G` is a tournament.

    A tournament is a directed graph, with neither self-loops nor
    multi-edges, in which there is exactly one directed edge joining
    each pair of distinct nodes.

    Parameters
    ----------
    G : NetworkX graph
        A directed graph representing a tournament.

    Returns
    -------
    bool
        Whether the given graph is a tournament graph.

    Notes
    -----
    Some definitions require a self-loop on each node, but that is not
    the convention used here.

    """
    # In a tournament, there is exactly one directed edge joining each pair.
    return (all((v in G[u]) ^ (u in G[v]) for u, v in combinations(G, 2)) and
            G.number_of_selfloops() == 0)
dataset/ETHPy150Open networkx/networkx/networkx/algorithms/tournament.py/is_tournament/original