def random(
        cls, vertices: int | Iterable, edge_probs: Mapping[int, float]
    ) -> UndirectedHypergraph:
        """A random hypergraph.

        Every possible edge is included with probability edge_prob[len(edge)].
        All edges are labelled with None.

        Args:
            vertices: The vertex set. If an integer i, the vertex set is
                {0, ..., i - 1}.
            edge_probs: The probabilities of edges of given sizes. Non-positive
                values mean the edge is never included and values at least 1
                mean that it is always included.
        """

        if isinstance(vertices, int):
            vertices = range(vertices)

        edges = []
        for edge_size, edge_prob in edge_probs.items():
            for potential_edge in itertools.combinations(vertices, edge_size):
                if random.random() < edge_prob:
                    edges.append(potential_edge)
        labelled_edges: dict[Iterable[Hashable], Any] = {edge: None for edge in edges}
        return cls(vertices=vertices, labelled_edges=labelled_edges)
A random hypergraph.

        Every possible edge is included with probability edge_prob[len(edge)].
        All edges are labelled with None.

        Args:
            vertices: The vertex set. If an integer i, the vertex set is
                {0, ..., i - 1}.
            edge_probs: The probabilities of edges of given sizes. Non-positive
                values mean the edge is never included and values at least 1
                mean that it is always included.
        
cirq-core/cirq/contrib/graph_device/hypergraph.py