U
    9vfk  ã                   @   s\   d Z ddlZddlmZ dddgZedƒddd„ƒZedƒdd	d„ƒZedƒdd
d„ƒZdS )z,
Generators for random intersection graphs.
é    N)Úpy_random_stateÚ!uniform_random_intersection_graphÚk_random_intersection_graphÚ!general_random_intersection_graphé   c                 C   s,   ddl m} | | |||¡}t |t| ƒ¡S )u“  Returns a uniform random intersection graph.

    Parameters
    ----------
    n : int
        The number of nodes in the first bipartite set (nodes)
    m : int
        The number of nodes in the second bipartite set (attributes)
    p : float
        Probability of connecting nodes between bipartite sets
    seed : integer, random_state, or None (default)
        Indicator of random number generation state.
        See :ref:`Randomness<randomness>`.

    See Also
    --------
    gnp_random_graph

    References
    ----------
    .. [1] K.B. Singer-Cohen, Random Intersection Graphs, 1995,
       PhD thesis, Johns Hopkins University
    .. [2] Fill, J. A., Scheinerman, E. R., and Singer-Cohen, K. B.,
       Random intersection graphs when m = !(n):
       An equivalence theorem relating the evolution of the g(n, m, p)
       and g(n, p) models. Random Struct. Algorithms 16, 2 (2000), 156â€“176.
    r   )Ú	bipartite)Znetworkx.algorithmsr   Zrandom_graphÚnxÚprojected_graphÚrange)ÚnÚmÚpÚseedr   ÚG© r   úD/tmp/pip-unpacked-wheel-_lngutwb/networkx/generators/intersection.pyr      s    c                 C   s`   t  | | ¡}t| | | ƒ}t| ƒD ]*}| ||¡}| t|gt|ƒ |ƒ¡ q$t  |t| ƒ¡S )a0  Returns a intersection graph with randomly chosen attribute sets for
    each node that are of equal size (k).

    Parameters
    ----------
    n : int
        The number of nodes in the first bipartite set (nodes)
    m : int
        The number of nodes in the second bipartite set (attributes)
    k : float
        Size of attribute set to assign to each node.
    seed : integer, random_state, or None (default)
        Indicator of random number generation state.
        See :ref:`Randomness<randomness>`.

    See Also
    --------
    gnp_random_graph, uniform_random_intersection_graph

    References
    ----------
    .. [1] Godehardt, E., and Jaworski, J.
       Two models of random intersection graphs and their applications.
       Electronic Notes in Discrete Mathematics 10 (2001), 129--132.
    )r   Úempty_graphr
   ÚsampleZadd_edges_fromÚzipÚlenr	   )r   r   Úkr   r   ÚmsetÚvÚtargetsr   r   r   r   1   s    c           	      C   sz   t |ƒ|krtdƒ‚t | | ¡}t| | | ƒ}t| ƒD ]0}t||ƒD ] \}}| ¡ |k rF| ||¡ qFq8t |t| ƒ¡S )u  Returns a random intersection graph with independent probabilities
    for connections between node and attribute sets.

    Parameters
    ----------
    n : int
        The number of nodes in the first bipartite set (nodes)
    m : int
        The number of nodes in the second bipartite set (attributes)
    p : list of floats of length m
        Probabilities for connecting nodes to each attribute
    seed : integer, random_state, or None (default)
        Indicator of random number generation state.
        See :ref:`Randomness<randomness>`.

    See Also
    --------
    gnp_random_graph, uniform_random_intersection_graph

    References
    ----------
    .. [1] Nikoletseas, S. E., Raptopoulos, C., and Spirakis, P. G.
       The existence and efficient construction of large independent sets
       in general random intersection graphs. In ICALP (2004), J. DÂ´Ä±az,
       J. KarhumÂ¨aki, A. LepistÂ¨o, and D. Sannella, Eds., vol. 3142
       of Lecture Notes in Computer Science, Springer, pp. 1029â€“1040.
    z(Probability list p must have m elements.)	r   Ú
ValueErrorr   r   r
   r   ÚrandomZadd_edger	   )	r   r   r   r   r   r   Úur   Úqr   r   r   r   T   s    )N)N)N)	Ú__doc__Znetworkxr   Znetworkx.utilsr   Ú__all__r   r   r   r   r   r   r   Ú<module>   s   ý""