§
    d˜ºh�  ã                   óþ   — d Z ddlZddlmZ g d¢Z ed¦  «        dd„¦   «         Z ed¦  «        dd	„¦   «         Zd
„ Z ed¦  «        dd„¦   «         Z	 ed¦  «        dd„¦   «         Z
 ed¦  «        dd„¦   «         ZdS )zS
Utilities for generating random numbers, random sequences, and
random selections.
é    N)Úpy_random_state)Úpowerlaw_sequenceÚzipf_rvÚcumulative_distributionÚdiscrete_sequenceÚrandom_weighted_sampleÚweighted_choiceé   ç       @c                 ó>   ‡‡— ˆˆfd„t          | ¦  «        D ¦   «         S )zK
    Return sample sequence of length n from a power law distribution.
    c                 ó@   •— g | ]}‰                      ‰d z
  ¦  «        ‘ŒS ©é   )Úparetovariate)Ú.0ÚiÚexponentÚseeds     €€úf/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/networkx/utils/random_sequence.pyú
<listcomp>z%powerlaw_sequence.<locals>.<listcomp>   s+   ø€ Ð?Ð?Ð?°ˆD×Ò˜x¨!™|Ñ,Ô,Ð?Ð?Ð?ó    )Úrange)Únr   r   s    ``r   r   r      s*   øø€ ð
 @Ð?Ð?Ð?Ð?µe¸A±h´hÐ?Ñ?Ô?Ð?r   r   c                 óB  — |dk     rt          d¦  «        ‚| dk    rt          d¦  «        ‚| dz
  }d|z  }	 d|                     ¦   «         z
  }|                     ¦   «         }t          ||d|z   z  z  ¦  «        }dd|z  z   |z  }||z  |dz
  z  |dz
  z  ||z  k    rnŒi|S )aw  Returns a random value chosen from the Zipf distribution.

    The return value is an integer drawn from the probability distribution

    .. math::

        p(x)=\frac{x^{-\alpha}}{\zeta(\alpha, x_{\min})},

    where $\zeta(\alpha, x_{\min})$ is the Hurwitz zeta function.

    Parameters
    ----------
    alpha : float
      Exponent value of the distribution
    xmin : int
      Minimum value
    seed : integer, random_state, or None (default)
        Indicator of random number generation state.
        See :ref:`Randomness<randomness>`.

    Returns
    -------
    x : int
      Random value from Zipf distribution

    Raises
    ------
    ValueError:
      If xmin < 1 or
      If alpha <= 1

    Notes
    -----
    The rejection algorithm generates random values for a the power-law
    distribution in uniformly bounded expected time dependent on
    parameters.  See [1]_ for details on its operation.

    Examples
    --------
    >>> nx.utils.zipf_rv(alpha=2, xmin=3, seed=42)
    8

    References
    ----------
    .. [1] Luc Devroye, Non-Uniform Random Variate Generation,
       Springer-Verlag, New York, 1986.
    r   zxmin < 1za <= 1.0g      ð?r
   )Ú
ValueErrorÚrandomÚint)	ÚalphaÚxminr   Úa1ÚbÚuÚvÚxÚts	            r   r   r       sÌ   € ðb ˆa‚x€xÝ˜Ñ$Ô$Ð$Ø�‚z€zÝ˜Ñ$Ô$Ð$Ø	�‰€BØ	ˆ2‰€AðØ�$—+’+‘-”-ÑˆØ�KŠK‰MŒMˆÝ��q˜c B™h˜KÑ'Ñ'Ñ(Ô(ˆØ�C˜!‘G‰_ Ñ#ˆØˆq‰5�A˜‘GÑ  C¡Ñ(¨A°©EÒ1Ð1Øðð €Hr   c                 ó¶   — dg}t          | ¦  «        }t          t          | ¦  «        ¦  «        D ])}|                     ||         | |         |z  z   ¦  «         Œ*|S )zFReturns normalized cumulative distribution from discrete distribution.g        )Úsumr   ÚlenÚappend)ÚdistributionÚcdfÚpsumr   s       r   r   r   a   sc   € ð ˆ%€CÝˆ|ÑÔ€DÝ•3�|Ñ$Ô$Ñ%Ô%ð 4ð 4ˆØ�
Š
�3�q”6˜L¨œO¨dÑ2Ñ2Ñ3Ô3Ð3Ð3Ø€Jr   é   c                 ó¾   ‡‡‡— ddl Š|�|Šn&|�t          |¦  «        Šnt          j        d¦  «        ‚ˆfd„t	          | ¦  «        D ¦   «         }ˆˆfd„|D ¦   «         }|S )a#  
    Return sample sequence of length n from a given discrete distribution
    or discrete cumulative distribution.

    One of the following must be specified.

    distribution = histogram of values, will be normalized

    cdistribution = normalized discrete cumulative distribution

    r   Nz8discrete_sequence: distribution or cdistribution missingc                 ó8   •— g | ]}‰                      ¦   «         ‘ŒS © )r   )r   r   r   s     €r   r   z%discrete_sequence.<locals>.<listcomp>„   s!   ø€ Ð0Ð0Ð0 !�—’‘”Ð0Ð0Ð0r   c                 óB   •— g | ]}‰                      ‰|¦  «        d z
  ‘ŒS r   )Úbisect_left)r   ÚsÚbisectr+   s     €€r   r   z%discrete_sequence.<locals>.<listcomp>‡   s.   ø€ Ð
<Ð
<Ð
<¨aˆ6×Ò˜c 1Ñ%Ô%¨Ñ)Ð
<Ð
<Ð
<r   )r4   r   ÚnxÚNetworkXErrorr   )r   r*   Úcdistributionr   ÚinputseqÚseqr4   r+   s      `  @@r   r   r   k   sŽ   øøø€ ð €M€M€MàÐ ØˆˆØ	Ð	!Ý% lÑ3Ô3ˆˆåÔØFñ
ô 
ð 	
ð
 1Ð0Ð0Ð0¥u¨Q¡x¤xÐ0Ñ0Ô0€Hð =Ð
<Ð
<Ð
<Ð
<°8Ð
<Ñ
<Ô
<€CØ€Jr   c                 ó  — |t          | ¦  «        k    rt          d¦  «        ‚t          ¦   «         }t          |¦  «        |k     r6|                     t	          | |¦  «        ¦  «         t          |¦  «        |k     °6t          |¦  «        S )z€Returns k items without replacement from a weighted sample.

    The input is a dictionary of items with weights as values.
    zsample larger than population)r(   r   ÚsetÚaddr	   Úlist)ÚmappingÚkr   Úsamples       r   r   r   ‹   su   € ð 	�3ˆw‰<Œ<ÒÐÝÐ8Ñ9Ô9Ð9Ý‰UŒU€FÝ
ˆf‰+Œ+˜Š/ˆ/Ø�
Š
•? 7¨DÑ1Ô1Ñ2Ô2Ð2õ ˆf‰+Œ+˜Š/ˆ/å�‰<Œ<Ðr   c                 óÄ   — |                      ¦   «         t          |                      ¦   «         ¦  «        z  }|                      ¦   «         D ]\  }}||z  }|dk     r|c S ŒdS )zuReturns a single element from a weighted sample.

    The input is a dictionary of items with weights as values.
    r   N)r   r'   ÚvaluesÚitems)r>   r   Úrndr?   Úws        r   r	   r	   ™   sm   € ð �+Š+‰-Œ-�#˜gŸnšnÑ.Ô.Ñ/Ô/Ñ
/€CØ—’‘”ð ð ‰ˆˆ1Øˆq‰ˆØ�Š7ˆ7ØˆHˆHˆHð ðð r   )r   N)r   N)NNN)N)Ú__doc__Únetworkxr5   Únetworkx.utilsr   Ú__all__r   r   r   r   r   r	   r0   r   r   ú<module>rJ      s5  ððð ð
 Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *ðð ð €ð €�ÑÔð@ð @ð @ñ Ôð@ð €�ÑÔð=ð =ð =ñ Ôð=ð@ð ð ð €�ÑÔðð ð ñ Ôðð> €�ÑÔð
ð 
ð 
ñ Ôð
ð €�ÑÔð
ð 
ð 
ñ Ôð
ð 
ð 
r   