easygraph.functions.hypergraph.null_model.uniform module#

Generate random uniform hypergraphs.

easygraph.functions.hypergraph.null_model.uniform.uniform_HPPM(n, m, rho, k, epsilon, seed=None)[source]#

Construct the m-uniform hypergraph planted partition model (m-HPPM)

Parameters:
  • n (int > 0) – Number of nodes

  • m (int > 0) – Hyperedge size

  • rho (float between 0 and 1) – The fraction of nodes in community 1

  • k (float > 0) – Mean degree

  • epsilon (float > 0) – Imbalance parameter

  • seed (integer or None (default)) – The seed for the random number generator

Returns:

The constructed m-HPPM hypergraph.

Return type:

Hypergraph

Raises:

EasyGraphError

  • If rho is not between 0 and 1

  • If the mean degree is negative.

  • If epsilon is not between 0 and 1

See also

uniform_HSBM

References

Nicholas W. Landry and Juan G. Restrepo. “Polarization in hypergraphs with community structure.” Preprint, 2023. https://doi.org/10.48550/arXiv.2302.13967

easygraph.functions.hypergraph.null_model.uniform.uniform_HSBM(n, m, p, sizes, seed=None)[source]#

Create a uniform hypergraph stochastic block model (HSBM).

Parameters:
  • n (int) – The number of nodes

  • m (int) – The hyperedge size

  • p (m-dimensional numpy array) – tensor of probabilities between communities

  • sizes (list or 1D numpy array) – The sizes of the community blocks in order

  • seed (integer or None (default)) – The seed for the random number generator

Returns:

The constructed SBM hypergraph

Return type:

Hypergraph

Raises:
  • EasyGraphError

    • If the length of sizes and p do not match.

    • If p is not a tensor with every dimension equal

    • If p is not m-dimensional

    • If the entries of p are not in the range [0, 1]

    • If the sum of the vector of sizes does not equal the number of nodes.

  • Exception – If there is an integer overflow error

See also

uniform_HPPM

References

Nicholas W. Landry and Juan G. Restrepo. “Polarization in hypergraphs with community structure.” Preprint, 2023. https://doi.org/10.48550/arXiv.2302.13967

easygraph.functions.hypergraph.null_model.uniform.uniform_erdos_renyi_hypergraph(n, m, p, p_type='degree', seed=None)[source]#

Generate an m-uniform Erdős–Rényi hypergraph

This creates a hypergraph with n nodes where hyperedges of size m are created at random to obtain a mean degree of k.

Parameters:
  • n (int > 0) – Number of nodes

  • m (int > 0) – Hyperedge size

  • p (float or int > 0) – Mean expected degree if p_type=”degree” and probability of an m-hyperedge if p_type=”prob”

  • p_type (str) – “degree” or “prob”, by default “degree”

  • seed (integer or None (default)) – The seed for the random number generator

Returns:

The Erdos Renyi hypergraph

Return type:

Hypergraph

See also

random_hypergraph

easygraph.functions.hypergraph.null_model.uniform.uniform_hypergraph_Gnm(k: int, num_v: int, num_e: int, n_workers=None)[source]#

Return a random k-uniform hypergraph with num_v vertices and num_e hyperedges.

Parameters:
  • k (int) – The Number of vertices in each hyperedge.

  • num_v (int) – The Number of vertices.

  • num_e (int) – The Number of hyperedges.

Examples

>>> import easygraph as eg
>>> hg = eg.uniform_hypergraph_Gnm(3, 5, 4)
>>> hg.e
([(0, 1, 2), (0, 1, 3), (0, 3, 4), (2, 3, 4)], [1.0, 1.0, 1.0, 1.0])
easygraph.functions.hypergraph.null_model.uniform.uniform_hypergraph_configuration_model(k, m, seed=None)[source]#

A function to generate an m-uniform configuration model

Parameters:
  • k (dictionary) – This is a dictionary where the keys are node ids and the values are node degrees.

  • m (int) – specifies the hyperedge size

  • seed (integer or None (default)) – The seed for the random number generator

Returns:

The generated hypergraph

Return type:

Hypergraph object

Warns:

warnings.warn – If the sums of the degrees are not divisible by m, the algorithm still runs, but raises a warning and adds an additional connection to random nodes to satisfy this condition.

Notes

This algorithm normally creates multi-edges and loopy hyperedges. We remove the loopy hyperedges.

References

“The effect of heterogeneity on hypergraph contagion models” by Nicholas W. Landry and Juan G. Restrepo https://doi.org/10.1063/5.0020034

Example

>>> import easygraph as eg
>>> import random
>>> n = 1000
>>> m = 3
>>> k = {1: 1, 2: 2, 3: 3, 4: 3}
>>> H = eg.uniform_hypergraph_configuration_model(k, m)