3 \2k@sddlmZddlmZmZddlm Z m Z m ZmZmZddlmZmZmZmZddlmZddlmZ m!Z"ddl#m$Z%ddl&Z'ddl(Z)d d d d d ddddddddddddddddddd gZ*d!e d1ed#Z+d#eZ,e d$Z-d%e d&Z.d'Z/d(e/ Z0ddl1Z1Gd)d d e1j2Z2Gd*d d e2Z3d+d,Z4d2d.d/Z5e2Z6e6j7Z7e6j8Z8e6j9Z9e6j:Z:e6j;Z;e6jZ>e6j?Z?e6j@Z@e6jAZAe6jBZBe6jCZCe6jDZDe6jEZEe6jFZFe6jGZGe6jHZHe6jIZIe6jJZJe6jKZKe6jLZLeMd0kre5dS)3)warn) MethodTypeBuiltinMethodType)logexppieceil)sqrtacoscossin)urandom)SetSequence)sha512NRandomseedrandomuniformrandintchoicesample randrangeshuffle normalvariatelognormvariate expovariatevonmisesvariate gammavariate triangulargauss betavariate paretovariateweibullvariategetstatesetstate getrandbitschoices SystemRandomg?g@g@g?g@5cseZdZdZd:ddZd;fdd Zfdd Zfd d Zd d ZddZ ddZ dde fddZ ddZ e de>eeefddZddZdd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Z d8d9Z!Z"S)?rNcCs|j|d|_dS)N)r gauss_next)selfxr1/usr/lib64/python3.6/random.py__init__Ws zRandom.__init__r,cs|dkrt|ttfrt|tr*|jdn|}|rBt|dd>nd}x"tt|D]}d||Ad@}qRW|t|N}|d krd n|}|dkrt|tttfrt|tr|j}|t |j 7}t j |d}t j|d|_dS) Nzlatin-1riCBlr,big) isinstancestrbytesdecodeordmaplen bytearrayencode_sha512Zdigestint from_bytessuperrr.)r/aversionr0c) __class__r1r2r`s    z Random.seedcs|jtj|jfS)N)VERSIONrEr%r.)r/)rIr1r2r%szRandom.getstatecs|d}|dkr*|\}}|_tj|nt|dkr|\}}|_ytdd|D}Wn(tk r|}z t|WYdd}~XnXtj|ntd||jfdS)Nrr-r,css|]}|dVqdS)r, Nlr1).0r0r1r1r2 sz"Random.setstate..z?state with version %s passed to Random.setstate() of version %s)r.rEr&tuple ValueError TypeErrorrJ)r/staterGZ internalstater)rIr1r2r&s  zRandom.setstatecCs|jS)N)r%)r/r1r1r2 __getstate__szRandom.__getstate__cCs|j|dS)N)r&)r/rQr1r1r2 __setstate__szRandom.__setstate__cCs|jf|jfS)N)rIr%)r/r1r1r2 __reduce__szRandom.__reduce__r4c Cs||}||krtd|dkr:|dkr2|j|Std||}||krRtd||}|dkrx|dkrx||j|S|dkrtd|||f||}||krtd|dkr||d|} n"|dkr||d|} ntd| dkrtd|||j| S) Nz!non-integer arg 1 for randrange()rzempty range for randrange()z non-integer stop for randrange()r4z'empty range for randrange() (%d,%d, %d)z non-integer step for randrange()zzero step for randrange())rO _randbelow) r/startstopstep_intZistartZistopwidthZistepnr1r1r2rs4  zRandom.randrangecCs|j||dS)Nr4)r)r/rFbr1r1r2rszRandom.randintc Cs|j}|j}|||ks$|||krN|j} || } x| |krH|| } q6W| S||krltd|||S|dkr|td||} || |} |} x| | kr|} 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.rzBoundary cannot be zero)rr' bit_length_warnrO) r/r[rCmaxsizetypeZMethodZ BuiltinMethodrr'krZremlimitr1r1r2rUs&     zRandom._randbelowc Cs:y|jt|}Wntk r0tddYnX||S)Nz$Cannot choose from an empty sequence)rUr?rO IndexError)r/seqir1r1r2rs z Random.choicecCs|dkrR|j}xttdt|D]*}||d}||||||<||<q"WnLt}xFttdt|D]0}|||d}||||||<||<qjWdS)Nr4)rUreversedranger?rC)r/r0r randbelowrfjrYr1r1r2rs   zRandom.shufflec Cs(t|trt|}t|ts$td|j}t|}d|koD|knsRtddg|}d}|dkr|dtt |dd7}||krt |}xt |D]0}|||} || ||<|||d|| <qWnRt } | j } xDt |D]8}||} x| | kr ||} qW| | || ||<qW|S) Nz>Population must be a sequence or set. For dicts, use list(d).rz,Sample larger than population or is negativer*r-r4)r9_SetrN _SequencerPrUr?rO_ceil_loglistrhsetadd) r/ populationrarir[resultZsetsizeZpoolrfrjZselectedZ selected_addr1r1r2rs6       z Random.sample) cum_weightsracs|jdkrN|dkr>ttfddt|DSttj|n|dk r^tdttkrvtdt j dtdfddt|DS)Ncsg|]}qSr1r1)rLrf)rYrtrtotalr1r2 csz"Random.choices..z2Cannot specify both weights and cumulative weightsz3The number of weights does not match the populationr4cs$g|]}dqS)rr1)rLrf)bisectrvhirtrrwr1r2rxlsr7) rrCr?rhrq _itertools accumulaterPrO_bisectry)r/rtZweightsrvrar1)rYryrvrzrtrrwr2r(Ws  zRandom.choicescCs||||jS)N)r)r/rFr\r1r1r2rsszRandom.uniform?c Csx|j}y |dkrdn||||}Wntk r<|SX||kr`d|}d|}||}}|||||dS)Ng?g?)rZeroDivisionError)r/ZlowZhighmodeurHr1r1r2r ys   zRandom.triangularcCsT|j}x@|}d|}t|d|}||d}|t| krPqW|||S)Ng?g?g@)r NV_MAGICCONSTrp)r/musigmaru1u2zZzzr1r1r2rs   zRandom.normalvariatecCst|j||S)N)_expr)r/rrr1r1r2rszRandom.lognormvariatecCstd|j |S)Ng?)rpr)r/Zlambdr1r1r2rszRandom.expovariatecCs|j}|dkrt|Sd|}|td||}xN|}tt|}|||}|} | d||ks~| d|t|kr6Pq6Wd|} | |d| |} |} | dkr|t| t} n|t| t} | S)Ngư>g?g?)rTWOPI_sqrt_cos_pir_acos)r/rZkapparsrbrrdrqfZu3Zthetar1r1r2rs&   $zRandom.vonmisesvariatecCs|dks|dkrtd|j}|dkrtd|d}|t}||}x|}d|ko`dknshqHd|}t|d||} |t| } |||} ||| | } | td| dks| t| krH| |SqHWn|dkr|} x| dkr|} qWt|  |Sx|} t|t}|| }|dkrD|d|} nt||| } |}|dkr||| |dkrPn|t| krPqW| |SdS)Ngz*gammavariate: alpha and beta must be > 0.0g?g@gHz>gP?g@)rOrrLOG4rpr SG_MAGICCONST_e)r/alphabetarZainvZbbbZcccrrvr0rrbrr\pr1r1r2rsJ          zRandom.gammavariatecCs`|j}|j}d|_|dkrT|t}tdtd|}t||}t|||_|||S)Ng@g?g)rr.rrrpr_sin)r/rrrrZx2piZg2radr1r1r2r!?s  z Random.gausscCs0|j|d}|dkrdS|||j|dSdS)Ng?rg)r)r/rryr1r1r2r"ts zRandom.betavariatecCsd|j}d|d|S)Ng?)r)r/rrr1r1r2r#s zRandom.paretovariatecCs"d|j}|t| d|S)Ng?)rrp)r/rrrr1r1r2r$s zRandom.weibullvariate)N)Nr,)N)N)r~rN)#__name__ __module__ __qualname__rJr3rr%r&rRrSrTrCrrBPFr` _MethodType_BuiltinMethodTyperUrrrr(rr rrrrrr!r"r#r$ __classcell__r1r1)rIr2rGs6   ,  :  0H5 c@s4eZdZddZddZddZddZeZZd S) r)cCstjtddd?tS)Nr5r6r-)rCrD_urandom RECIP_BPF)r/r1r1r2rszSystemRandom.randomcCsP|dkrtd|t|kr$td|dd}tjt|d}||d|?S)Nrz(number of bits must be greater than zeroz#number of bits should be an integerr5r6)rOrCrPrDr)r/raZnumbytesr0r1r1r2r's  zSystemRandom.getrandbitscOsdS)Nr1)r/argskwdsr1r1r2rszSystemRandom.seedcOs tddS)Nz*System entropy source does not have state.)NotImplementedError)r/rrr1r1r2_notimplementedszSystemRandom._notimplementedN) rrrrr'rrr%r&r1r1r1r2r)s  cCsddl}t|d|jd}d}d}d }|j}x@t|D]4} ||} || 7}|| | }t| |}t| |}q8W|j} tt| |dddd||} t||| | } td | | ||fdS) Nrtimesgg _Br-zsec, )endz"avg %g, stddev %g, min %g, max %g g _)timeprintrrhminmaxroundr)r[funcrrrwZsqsumZsmallestZlargestZt0rfr0Zt1ZavgZstddevr1r1r2_test_generators&  rcCst|tft|td t|td t|td t|tdt|tdt|tdt|tdt|tdt|tdt|tdt|tdt|tdt|tdt|tdt|tddS)N?{Gz?皙?@??4@i@@)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rr)rrUUUUUU?)rrr) rrrrrrr!r"r )Nr1r1r2_tests                r__main__g)r)Nwarningsrr^typesrrrrZmathrrprrrrrrr ror rr rr rr rosrr_collections_abcrrmrrnZhashlibrrB itertoolsr{ryr}__all__rrrrrrZ_randomrr)rrZ_instrrrr rrrrrr(rrrrrr!r"r#r$r%r&r'rr1r1r1r2(sl     Y!