
    ¿ig~                         g d Z ddlmZ ddlmZ  G d de          Z e            Zej        Zej	        Z	ej
        Z
ej        Zej        Zej        ZddlmZmZmZmZ dS ))StrongRandomgetrandbits	randrangerandintchoiceshufflesample    )Random)is_native_intc                   :    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	dS )
r   Nc                 x    ||	d | _         d S ||	|| _         d S |||j        | _         d S t          d          )Nz(Cannot specify both 'rng' and 'randfunc')	_randfuncread
ValueError)selfrngrandfuncs      T/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/Random/random.py__init__zStrongRandom.__init__    sR    !DNNN!ck%DNNN#/ XDNNNGHHH    c           	          | j         t          j                    j        | _         d|z  dz
  }|t	          |                      t          |d                              z  S )z%Return an integer with k random bits.N      )r   r
   newr   bytes_to_longceil_div)r   kmasks      r   r   zStrongRandom.getrandbits*   sP     >!#Z\\.DNQ!|mDNN8Aq>>$B$BCCCCr   c           	      j   t          |          dk    r|\  }}}nWt          |          dk    r|\  }}d}n<t          |          dk    r	|\  }d}d}n t          dt          |          fz            t          |          rt          |          rt          |          st          d          |dk    rt          d          t	          ||z
  |          }|dk     rd}|dk     rt          d|d	|d	|d
          |}||k    r(|                     t          |                    }||k    (|||z  z   S )zkrandrange([start,] stop[, step]):
        Return a randomly-selected element from range(start, stop, step).      r   r	   z.randrange expected at most 3 arguments, got %dz$randrange requires integer argumentsz(randrange step argument must not be zerozempty range for randrange(z, ))len	TypeErrorr   r   r   r   size)r   argsstartstopstepnum_choicesrs          r   r   zStrongRandom.randrange2   sv    t99>>"&UD$$YY!^^ MUDDDYY!^^GTEDDLPSTXPYPY|[\\\e$$ 	DM$,?,? 	Dd##	DBCCC199GHHHte|T22??K??*tttUYUYUYZ[[[ ;  k!2!233A ; q!!r   c                     t          |          rt          |          st          d          |                     ||dz             }||cxk    r|k    sn J |S )z0Return a random integer N such that a <= N <= b.z"randint requires integer argumentsr   )r   r$   r   )r   abNs       r   r   zStrongRandom.randintS   si    Q 	B}Q'7'7 	B@AAANN1ac""A{{{{{{{{{{r   c                     t          |          dk    rt          d          ||                     t          |                             S )zrReturn a random element from a (non-empty) sequence.

        If the seqence is empty, raises IndexError.
        r	   zempty sequence)r#   
IndexErrorr   )r   seqs     r   r   zStrongRandom.choice[   s?    
 s88q==-...4>>#c((++,,r   c                     t          t          |          dz
  dd          D ]2}|                     d|dz             }||         ||         c||<   ||<   3dS )zShuffle the sequence in place.r   r	   N)ranger#   r   )r   xijs       r   r   zStrongRandom.shuffled   sg     s1vvaxB'' 	$ 	$Aq!A#&&A1qtJAaD!A$$	$ 	$r   c                     t          |          }||k    rt          d          g }i }t          |          D ]E}d}|||v r|                     |          }|||v |                    ||                    d||<   F|S )zNReturn a k-length list of unique elements chosen from the population sequence.zsample larger than populationNr   )r#   r   r5   r   append)r   
populationr   r*   retvalselectedr7   r+   s           r   r   zStrongRandom.samplen   s     *oo{??<===q 	 	AA)qH}}NN;// )qH}}MM*Q-(((HQKKr   )NN)
__name__
__module____qualname__r   r   r   r   r   r   r    r   r   r   r      s        I I I ID D D" " "B  - - -$ $ $    r   r   )r   r   long_to_bytesr%   N)__all__
Cryptodomer
   Cryptodome.Util.py3compatr   objectr   _rr   r   r   r   r   r   Cryptodome.Util.numberr   r   rB   r%   rA   r   r   <module>rI      s   2 a
`
`       3 3 3 3 3 3^ ^ ^ ^ ^6 ^ ^ ^@ \^^nL	
*	
*	 P O O O O O O O O O O O O Or   