???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \2k                 @   s  d dl mZ d dlmZmZ d dlm	Z
mZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZ m!Z" d dl#m$Z% d dl&Z'd dl(Z)d	d
dddddddddddddddddddddd gZ*d!ed1 ed# Z+d#e Z,e
d$Z-d%e
d& Z.d'Z/d(e/  Z0d dl1Z1G d)d	 d	e1j2Z2G d*d  d e2Z3d+d, Z4d2d.d/Z5e2 Z6e6j7Z7e6j8Z8e6j9Z9e6j:Z:e6j;Z;e6j<Z<e6j=Z=e6j>Z>e6j?Z?e6j@Z@e6jAZAe6jBZBe6jCZCe6jDZDe6jEZEe6jFZFe6jGZGe6jHZHe6jIZIe6jJZJe6jKZKe6jLZLeMd0kre5  dS )3    )warn)
MethodTypeBuiltinMethodType)logexppieceil)sqrtacoscossin)urandom)SetSequence)sha512NRandomseedrandomuniformrandintchoicesample	randrangeshufflenormalvariatelognormvariateexpovariatevonmisesvariategammavariate
triangulargaussbetavariateparetovariateweibullvariategetstatesetstategetrandbitschoicesSystemRandom   g      ?g       @g      @g      ?g      @5      c                   s  e Zd ZdZd:ddZd; fdd	Z fdd	Z fd
dZdd Zdd Z	dd Z
ddefddZdd Zede> eeefddZdd Zd<ddZdd Zd=dddd d!Zd"d# Zd>d&d'Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z d8d9 Z!  Z"S )?r      Nc             C   s   | j | d | _d S )N)r   
gauss_next)selfx r1   /usr/lib64/python3.6/random.py__init__W   s    
zRandom.__init__r,   c                s   |dkrt |ttfrt |tr*|jdn|}|rBt|d d> nd}x"tt|D ]}d| |A d@ }qRW |t|N }|d	krd
n|}|dkrt |tttfrt |tr|j }|t	|j
 7 }tj|d}t j| d | _d S )N   zlatin-1r      iCB l    r,   big)
isinstancestrbytesdecodeordmaplen	bytearrayencode_sha512Zdigestint
from_bytessuperr   r.   )r/   aversionr0   c)	__class__r1   r2   r   `   s    
zRandom.seedc                s   | j t j | jfS )N)VERSIONrE   r%   r.   )r/   )rI   r1   r2   r%      s    zRandom.getstatec                s   |d }|dkr*|\}}| _ t j| nt|dkr|\}}| _ ytdd |D }W n( tk
r| } zt|W Y d d }~X nX t j| ntd|| jf d S )Nr   r-   r,   c             s   s   | ]}|d V  qdS )r,       Nl        r1   ).0r0   r1   r1   r2   	<genexpr>   s    z"Random.setstate.<locals>.<genexpr>z?state with version %s passed to Random.setstate() of version %s)r.   rE   r&   tuple
ValueError	TypeErrorrJ   )r/   staterG   Zinternalstater   )rI   r1   r2   r&      s    zRandom.setstatec             C   s   | j  S )N)r%   )r/   r1   r1   r2   __getstate__   s    zRandom.__getstate__c             C   s   | j | d S )N)r&   )r/   rQ   r1   r1   r2   __setstate__   s    zRandom.__setstate__c             C   s   | j f | j fS )N)rI   r%   )r/   r1   r1   r2   
__reduce__   s    zRandom.__reduce__r4   c       
      C   s  ||}||krt d|d kr:|dkr2| j|S t d||}||krRt d|| }|dkrx|dkrx|| j| S |dkrt d|||f ||}||krt d|dkr|| d | }	n"|dk r|| d | }	nt d|	dkrt d||| j|	  S )	Nz!non-integer arg 1 for randrange()r   zempty range for randrange()z non-integer stop for randrange()r4   z'empty range for randrange() (%d,%d, %d)z non-integer step for randrange()zzero step for randrange())rO   
_randbelow)
r/   startstopstep_intZistartZistopwidthZistepnr1   r1   r2   r      s4    

zRandom.randrangec             C   s   | j ||d S )Nr4   )r   )r/   rF   br1   r1   r2   r      s    zRandom.randintc             C   s   | j }| j}|||ks$|||krN|j }	||	}
x|
|krH||	}
q6W |
S ||krltd || | S |dkr|td|| }|| | }| }
x|
|kr| }
qW ||
| | S )NzUnderlying random() generator does not supply 
enough bits to choose from a population range this large.
To remove the range limitation, add a getrandbits() method.r   zBoundary cannot be zero)r   r'   
bit_length_warnrO   )r/   r[   rC   maxsizetypeZMethodZBuiltinMethodr   r'   krZremlimitr1   r1   r2   rU      s&    


zRandom._randbelowc             C   s:   y| j t|}W n tk
r0   tdd Y nX || S )Nz$Cannot choose from an empty sequence)rU   r?   rO   
IndexError)r/   seqir1   r1   r2   r      s
    zRandom.choicec             C   s   |d krR| j }xttdt|D ]*}||d }|| ||  ||< ||< q"W nLt}xFttdt|D ]0}|| |d  }|| ||  ||< ||< qjW d S )Nr4   )rU   reversedranger?   rC   )r/   r0   r   	randbelowrf   jrY   r1   r1   r2   r     s    	 zRandom.shufflec             C   s(  t |trt|}t |ts$td| j}t|}d|  koD|kn  sRtdd g| }d}|dkr|dtt	|d d 7 }||krt
|}xt|D ]0}||| }	||	 ||< ||| d  ||	< qW nRt }
|
j}xDt|D ]8}||}	x|	|
kr
||}	qW ||	 ||	 ||< qW |S )	Nz>Population must be a sequence or set.  For dicts, use list(d).r   z,Sample larger than population or is negative      r*   r-   r4   )r9   _SetrN   	_SequencerP   rU   r?   rO   _ceil_loglistrh   setadd)r/   
populationra   ri   r[   resultZsetsizeZpoolrf   rj   ZselectedZselected_addr1   r1   r2   r     s6    


zRandom.sample)cum_weightsra   c               s   | j d krN|d kr>t t fddt|D S ttj|n|d k	r^tdttkrvtdt	j
d td fddt|D S )Nc                s   g | ]}    qS r1   r1   )rL   rf   )rY   rt   r   totalr1   r2   
<listcomp>c  s    z"Random.choices.<locals>.<listcomp>z2Cannot specify both weights and cumulative weightsz3The number of weights does not match the populationr4   c                s$   g | ]}   d  qS )r   r1   )rL   rf   )bisectrv   hirt   r   rw   r1   r2   rx   l  s   r7   )r   rC   r?   rh   rq   
_itertools
accumulaterP   rO   _bisectry   )r/   rt   Zweightsrv   ra   r1   )rY   ry   rv   rz   rt   r   rw   r2   r(   W  s     zRandom.choicesc             C   s   ||| | j    S )N)r   )r/   rF   r\   r1   r1   r2   r   s  s    zRandom.uniform              ?c             C   sx   | j  }y |d krdn|| ||  }W n tk
r<   |S X ||kr`d| }d| }|| }}||| || d   S )Ng      ?g      ?)r   ZeroDivisionError)r/   ZlowZhighmodeurH   r1   r1   r2   r    y  s    	 
zRandom.triangularc             C   sT   | j }x@| }d|  }t|d  | }|| d }|t| krP qW |||  S )Ng      ?g      ?g      @)r   NV_MAGICCONSTrp   )r/   musigmar   u1u2zZzzr1   r1   r2   r     s    
zRandom.normalvariatec             C   s   t | j||S )N)_expr   )r/   r   r   r1   r1   r2   r     s    zRandom.lognormvariatec             C   s   t d| j   | S )Ng      ?)rp   r   )r/   Zlambdr1   r1   r2   r     s    zRandom.expovariatec             C   s   | j }|dkrt|  S d| }|td||   }xN| }tt| }|||  }| }	|	d||  k s~|	d| t| kr6P q6W d| }
|
| d|
|   }| }|dkr|t| t }n|t| t }|S )Ngư>g      ?g      ?)r   TWOPI_sqrt_cos_pir   _acos)r/   r   Zkappar   srb   r   r   dr   qfZu3Zthetar1   r1   r2   r     s&    
$zRandom.vonmisesvariatec             C   s  |dks|dkrt d| j}|dkrtd| d }|t }|| }x| }d|  k o`dk n  shqHd|  }t|d|  | }	|t|	 }
|| | }|||	  |
 }|t d|  dks|t|krH|
| S qHW n|dkr| }x|dkr | }qW t| | S x| }t| t }|| }|dkrD|d|  }
nt|| |  }
| }|dkr|||
|d  krP n|t|
 krP qW |
| S d S )Ng        z*gammavariate: alpha and beta must be > 0.0g      ?g       @gHz>gP?g      @)rO   r   r   LOG4rp   r   SG_MAGICCONST_e)r/   alphabetar   ZainvZbbbZcccr   r   vr0   r   rb   r   r\   pr1   r1   r2   r     sJ    
 



zRandom.gammavariatec             C   s`   | j }| j}d | _|d krT| t }tdtd|   }t|| }t|| | _|||  S )Ng       @g      ?g       )r   r.   r   r   rp   r   _sin)r/   r   r   r   r   Zx2piZg2radr1   r1   r2   r!   ?  s    
zRandom.gaussc             C   s0   | j |d}|dkrdS ||| j |d  S d S )Ng      ?r   g        )r   )r/   r   r   yr1   r1   r2   r"   t  s    
zRandom.betavariatec             C   s   d| j   }d|d|   S )Ng      ?)r   )r/   r   r   r1   r1   r2   r#     s    zRandom.paretovariatec             C   s"   d| j   }|t| d|   S )Ng      ?)r   rp   )r/   r   r   r   r1   r1   r2   r$     s    zRandom.weibullvariate)N)Nr,   )N)N)r~   r   N)#__name__
__module____qualname__rJ   r3   r   r%   r&   rR   rS   rT   rC   r   r   BPFr`   _MethodType_BuiltinMethodTyperU   r   r   r   r(   r   r    r   r   r   r   r   r!   r"   r#   r$   __classcell__r1   r1   )rI   r2   r   G   s6   
	 ,

:
0H5	c               @   s4   e Zd Zdd Zdd Zdd Zdd Ze ZZd	S )
r)   c             C   s   t jtddd? t S )Nr5   r6   r-   )rC   rD   _urandom	RECIP_BPF)r/   r1   r1   r2   r     s    zSystemRandom.randomc             C   sP   |dkrt d|t|kr$td|d d }tjt|d}||d | ? S )Nr   z(number of bits must be greater than zeroz#number of bits should be an integerr5      r6   )rO   rC   rP   rD   r   )r/   ra   Znumbytesr0   r1   r1   r2   r'     s    zSystemRandom.getrandbitsc             O   s   d S )Nr1   )r/   argskwdsr1   r1   r2   r     s    zSystemRandom.seedc             O   s   t dd S )Nz*System entropy source does not have state.)NotImplementedError)r/   r   r   r1   r1   r2   _notimplemented  s    zSystemRandom._notimplementedN)	r   r   r   r   r'   r   r   r%   r&   r1   r1   r1   r2   r)     s
   
c             C   s   dd l }t| d|j d}d}d}d
}|j  }x@t| D ]4}	|| }
||
7 }||
|
  }t|
|}t|
|}q8W |j  }tt|| dddd ||  }t||  ||  }td	||||f  d S )Nr   timesg        g    _Br-   zsec, )endz"avg %g, stddev %g, min %g, max %g
g    _)timeprintr   rh   minmaxroundr   )r[   funcr   r   rw   ZsqsumZsmallestZlargestZt0rf   r0   Zt1ZavgZstddevr1   r1   r2   _test_generator  s&    
r     c             C   s   t | tf  t | td t | td t | td t | td t | td t | td t | td t | td t | td t | td t | td t | td t | td t | td t | td d S )N              ?{Gz?皙?       @      ??      4@      i@      @)r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   UUUUUU?)r   r   r   )	r   r   r   r   r   r   r!   r"   r    )Nr1   r1   r2   _test  s     r   __main__g      )r   )Nwarningsr   r^   typesr   r   r   r   Zmathr   rp   r   r   r   r   r   r   r	   ro   r
   r   r   r   r   r   r   r   osr   r   _collections_abcr   rm   r   rn   Zhashlibr   rB   	itertoolsr{   ry   r}   __all__r   r   r   r   r   r   Z_randomr   r)   r   r   Z_instr   r   r   r    r   r   r   r   r   r(   r   r   r   r   r   r!   r"   r#   r$   r%   r&   r'   r   r1   r1   r1   r2   <module>(   sl   
    Y!

