summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-18 05:41:13 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-18 05:41:13 +0000
commit8eb1289c078774de4c4b91d6e2766100aaca3fe5 (patch)
treed1962cab1d42e2b81258dcff814047ebd431fbf6
parentdcc15a7951893d5ae7b15ec60608937fae4d1004 (diff)
automatic import of python-pyewacket
-rw-r--r--.gitignore1
-rw-r--r--python-pyewacket.spec3132
-rw-r--r--sources1
3 files changed, 3134 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..6116ff2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/Pyewacket-1.3.9.tar.gz
diff --git a/python-pyewacket.spec b/python-pyewacket.spec
new file mode 100644
index 0000000..c8c7584
--- /dev/null
+++ b/python-pyewacket.spec
@@ -0,0 +1,3132 @@
+%global _empty_manifest_terminate_build 0
+Name: python-Pyewacket
+Version: 1.3.9
+Release: 1
+Summary: Drop-in Replacement for the Python Random Module.
+License: Free for non-commercial use
+URL: https://pypi.org/project/Pyewacket/
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/bc/de/7e1c65e019d89c09020ac7c641af45194b71eb485e844f72e212f1618ebd/Pyewacket-1.3.9.tar.gz
+BuildArch: noarch
+
+
+%description
+# Pyewacket
+### Fast, fault-tolerant, drop-in replacement for the Python3 random module
+
+Built on top of the RNG Storm Engine for stability and performance. Storm is a high quality random engine, but totally not appropriate for cryptography of any kind. Pyewacket is meant for games, data science, A.I. and experimental programming, not security.
+
+
+### Quick Install `$ pip install Pyewacket`
+
+
+### Installation may require the following:
+- Python 3.6 or later with dev tools (setuptools, pip, etc.)
+- Cython: Bridge from C/C++ to Python.
+- Modern C++17 Compiler and Standard Library.
+
+
+### Sister Projects:
+- Fortuna: Collection of tools to make custom random value generators. https://pypi.org/project/Fortuna/
+- Pyewacket: Drop-in replacement for the Python3 random module. https://pypi.org/project/Pyewacket/
+- MonkeyScope: Framework for testing non-deterministic generators. https://pypi.org/project/MonkeyScope/
+
+
+# Random Generators
+
+## Random Integers
+- `Pyewacket.randbelow(n: int) -> int`
+ - @param n :: Pyewacket expands the acceptable input domain to include non-positive values of n.
+ - @return :: random integer in range (n, 0] or [0, n) depending on the sign of n.
+
+```python
+from Pyewacket import randbelow
+
+
+randbelow(10) # -> [0, 10)
+randbelow(0) # -> [0, 0) => 0
+randbelow(-10) # -> (-10, 0]
+```
+
+- `Pyewacket.randint(a: int, b: int) -> int`
+ - @param a, b :: inputs to form the output distribution range
+ - @return :: random integer in range [a, b] or [b, a]
+ - Inclusive on both sides
+ - Removed the asymmetric requirement of a < b
+ - When a == b this always returns a
+
+```python
+from Pyewacket import randint
+
+
+randint(1, 10) # -> [1, 10]
+randint(10, 1) # -> [1, 10]
+randint(10, 10) # -> [10, 10] => 10
+```
+
+- `Pyewacket.randrange(start: int, stop: int = 0, step: int = 1) -> int`
+ - @param start :: This is the starting point for the distribution range so long as start <= stop and step >= 0
+ - @param stop :: optional, default=0, stating point iff stop < start.
+ - @param step :: optional, default=1, negative stepping will flip start and stop.
+ - The sign of the step controls the phase of the output, said another way: negative ranges count backwards.
+ - @return :: random integer in range (stop, start] or [start, stop), by increments of |step|
+ - Removed the requirements of start < stop, and step > 0
+ - Always returns start iff start == stop or step == 0
+
+```python
+from Pyewacket import randrange
+
+
+randrange(10) # -> [0, 10) by whole numbers
+randrange(1, 10) # -> [1, 10) by whole numbers
+randrange(1, 10, 2) # -> [1, 10) by 2, odd numbers
+randrange(-10) # -> [-10, 0) by 1
+randrange(10, 1) # -> [1, 10) by 1
+randrange(10, 0, 2) # -> [0, 10) by 2, even numbers
+randrange(10, 10, 0) # -> [10, 10) => 10
+```
+
+## Random Floating Point
+- `Pyewacket.random() -> float`
+ - random float in range [0.0, 1.0] or [0.0, 1.0) depending on rounding, platform specific.
+- `Pyewacket.uniform(a: float, b: float) -> float`
+ - random float in [a, b] or [a, b) depending on rounding
+- `Pyewacket.expovariate(lambd: float) -> float`
+- `Pyewacket.gammavariate(alpha, beta) -> float`
+- `Pyewacket.weibullvariate(alpha, beta) -> float`
+- `Pyewacket.betavariate(alpha, beta) -> float`
+- `Pyewacket.paretovariate(alpha) -> float`
+- `Pyewacket.gauss(mu: float, sigma: float) -> float`
+- `Pyewacket.normalvariate(mu: float, sigma: float) -> float` same as Pyewacket.gauss()
+- `Pyewacket.lognormvariate(mu: float, sigma: float) -> float`
+- `Pyewacket.vonmisesvariate(mu: float, kappa: float) -> float`
+- `Pyewacket.triangular(low: float, high: float, mode: float = None)`
+
+## Random Sequence Values
+- `Pyewacket.choice(seq: List) -> Value`
+ - @param seq :: any zero indexed object like a list or tuple.
+ - @return :: random value from the list, can be any object type that can be put into a list.
+- `Pyewacket.choices(population, weights=None, *, cum_weights=None, k=1)`
+ - @param population :: data values
+ - @param weights :: relative weights
+ - @param cum_weights :: cumulative weights
+ - @param k :: number of samples to be collected
+- `Pyewacket.cumulative_weighted_choice(table, k=1)`
+ - Supports Cumulative Weights only. Convert relative weights to cumulative if needed: `cum_weights = tuple(itertools.accumulate(rel_weights))`
+ - @param table :: two dimensional list or tuple of weighted value pairs. `[(1, "a"), (10, "b"), (100, "c")...]`
+ - The table can be constructed as `tuple(zip(cum_weights, population))` weights always come first.
+ - @param k :: number of samples to be collected. Returns a list of size k if k > 1, otherwise returns a single value - not a list of one.
+- `Pyewacket.shuffle(array: list) -> None`
+ - Shuffles a list in place.
+ - @param array :: must be a mutable list.
+ - Implements Knuth B Shuffle Algorithm. Knuth B is twice as fast as Knuth A or Fisher-Yates for every test case. This is likely due to the combination of walking backward and rotating backward into the back side of the list. With this combination it can never modify the data it still needs to walk through. Fresh snow all the way home, aka very low probability for cache misses.
+- `Pyewacket.sample(population: List, k: int) -> list`
+ - @param population :: list or tuple.
+ - @param k :: number of unique samples to get.
+ - @return :: size k list of unique random samples.
+
+## Hardware & Software Seeding
+- `seed(seed: int=0) -> None`
+ - Hardware seeding is enabled by default. This function is used to turn toggle software seeding and set or reset the engine seed. This affects all random functions in the module.
+ - @param seed :: any non-zero positive integer less than 2**63 enables software seeding.
+ - Calling `seed()` or `seed(0)` will turn off software seeding and re-enable hardware seeding.
+ - While you can toggle software seeding on and off and re-seed the engine at will without error, this function is **not intended to be used inside a tight loop**. General rule: seed once, or better yet, not at all. Typically, software seeding is for debugging a product, hardware seeding is used for product release. Please don't use software seeding for the release version of a game!
+
+
+## Development Log
+##### Pyewacket 1.3.9
+- Installer update
+
+##### Pyewacket 1.3.8
+- Documentation Update
+
+##### Pyewacket 1.3.7
+- Fixed more typos
+
+##### Pyewacket 1.3.6
+- Fixed Typos
+
+##### Pyewacket 1.3.5
+- Installer update
+
+##### Pyewacket 1.3.4
+- Storm 3.2.2 Update.
+
+##### Pyewacket 1.3.3
+- Pyewacket is now compatible with python notebooks.
+
+##### Pyewacket 1.3.2
+- Storm Update
+
+##### Pyewacket 1.3.1
+- Storm Update
+
+##### Pyewacket 1.3.0
+- Major API Update, several utilities have been moved into their own module: MonkeyScope.
+ - distribution_timer
+ - distribution
+ - timer
+
+##### Pyewacket 1.2.4
+- `Pyewacket.randrange()` bug fix
+- Test Update
+
+##### Pyewacket 1.2.3
+- Minor Bug Fix
+
+##### Pyewacket 1.2.2
+- Typo Fix
+
+##### Pyewacket 1.2.1
+- Test Update
+
+##### Pyewacket 1.2.0
+- Storm Update
+
+##### Pyewacket 1.1.2
+- Low level clean up
+
+##### Pyewacket 1.1.1
+- Docs Update
+
+##### Pyewacket 1.1.0
+- Storm Engine Update
+
+##### Pyewacket 1.0.3
+- minor typos
+
+##### Pyewacket 1.0.2
+- added choices alternative `cumulative_weighted_choice`
+
+##### Pyewacket 1.0.1
+- minor typos
+
+##### Pyewacket 1.0.0
+- Storm 2 Rebuild.
+
+##### Pyewacket 0.1.22
+- Small bug fix.
+
+##### Pyewacket 0.1.21
+- Public Release
+
+##### Pyewacket 0.0.2b1
+- Added software seeding.
+
+##### Pyewacket v0.0.1b8
+- Fixed a small bug in the tests.
+
+##### Pyewacket v0.0.1b7
+- Engine Fine Tuning
+- Fixed some typos.
+
+##### Pyewacket v0.0.1b6
+- Rearranged tests to be more consistent and match the documentation.
+
+##### Pyewacket v0.0.1b5
+- Documentation Upgrade
+- Minor Performance Tweaks
+
+##### Pyewacket v0.0.1b4
+- Public Beta
+
+##### Pyewacket v0.0.1b3
+- quick_test()
+- Extended Functionality
+ - sample()
+ - expovariate()
+ - gammavariate()
+ - weibullvariate()
+ - betavariate()
+ - paretovariate()
+ - gauss()
+ - normalvariate()
+ - lognormvariate()
+ - vonmisesvariate()
+ - triangular()
+
+##### Pyewacket v0.0.1b2
+- Basic Functionality
+ - random()
+ - uniform()
+ - randbelow()
+ - randint()
+ - randrange()
+ - choice()
+ - choices()
+ - shuffle()
+
+##### Pyewacket v0.0.1b1
+- Initial Design & Planning
+
+
+## Distribution and Performance Tests
+```
+MonkeyScope: Pyewacket
+
+Base Case
+Output Analysis: Random._randbelow(10)
+Typical Timing: 581 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.557
+ Std Deviation: 2.8430179387404504
+Distribution of 10000 samples:
+ 0: 9.9%
+ 1: 10.19%
+ 2: 10.64%
+ 3: 10.21%
+ 4: 10.19%
+ 5: 10.02%
+ 6: 10.09%
+ 7: 9.63%
+ 8: 9.47%
+ 9: 9.66%
+
+Output Analysis: randbelow(10)
+Typical Timing: 67 ± 10 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 9
+ Mean: 4.425
+ Std Deviation: 2.8692115641757754
+Distribution of 10000 samples:
+ 0: 9.92%
+ 1: 9.48%
+ 2: 10.36%
+ 3: 10.7%
+ 4: 9.92%
+ 5: 9.85%
+ 6: 10.38%
+ 7: 9.96%
+ 8: 9.76%
+ 9: 9.67%
+
+Base Case
+Output Analysis: Random.randint(1, 10)
+Typical Timing: 1148 ± 71 ns
+Statistics of 1000 samples:
+ Minimum: 1
+ Median: 5
+ Maximum: 10
+ Mean: 5.394
+ Std Deviation: 2.8500463154131372
+Distribution of 10000 samples:
+ 1: 10.1%
+ 2: 10.43%
+ 3: 9.63%
+ 4: 9.85%
+ 5: 9.46%
+ 6: 9.83%
+ 7: 10.15%
+ 8: 10.7%
+ 9: 9.64%
+ 10: 10.21%
+
+Output Analysis: randint(1, 10)
+Typical Timing: 61 ± 8 ns
+Statistics of 1000 samples:
+ Minimum: 1
+ Median: 6
+ Maximum: 10
+ Mean: 5.566
+ Std Deviation: 2.871871167026822
+Distribution of 10000 samples:
+ 1: 10.52%
+ 2: 9.61%
+ 3: 9.96%
+ 4: 10.1%
+ 5: 9.95%
+ 6: 9.38%
+ 7: 10.66%
+ 8: 9.84%
+ 9: 10.13%
+ 10: 9.85%
+
+Base Case
+Output Analysis: Random.randrange(0, 10, 2)
+Typical Timing: 1248 ± 73 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 8
+ Mean: 3.946
+ Std Deviation: 2.7873076615257237
+Distribution of 10000 samples:
+ 0: 20.18%
+ 2: 19.76%
+ 4: 21.0%
+ 6: 19.9%
+ 8: 19.16%
+
+Output Analysis: randrange(0, 10, 2)
+Typical Timing: 98 ± 16 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 8
+ Mean: 3.834
+ Std Deviation: 2.8072128526351547
+Distribution of 10000 samples:
+ 0: 20.61%
+ 2: 20.39%
+ 4: 20.07%
+ 6: 19.58%
+ 8: 19.35%
+
+Base Case
+Output Analysis: Random.random()
+Typical Timing: 37 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.0022025335119719713
+ Median: (0.504236734486946, 0.5043377592978666)
+ Maximum: 0.9988675528749947
+ Mean: 0.4992614084502893
+ Std Deviation: 0.29450740919885326
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.17%
+ 1: 49.83%
+
+Output Analysis: random()
+Typical Timing: 36 ± 1 ns
+Statistics of 1000 samples:
+ Minimum: 0.0005611174645538731
+ Median: (0.5035689629010788, 0.5043732233487602)
+ Maximum: 0.9997053348692302
+ Mean: 0.5062137836044255
+ Std Deviation: 0.2872867534109569
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.19%
+ 1: 49.81%
+
+Base Case
+Output Analysis: Random.uniform(0.0, 10.0)
+Typical Timing: 239 ± 21 ns
+Statistics of 1000 samples:
+ Minimum: 0.00855387357446502
+ Median: (4.8377420821319275, 4.839112429261609)
+ Maximum: 9.944528377056002
+ Mean: 4.985114491741573
+ Std Deviation: 2.854828406573762
+Post-processor distribution of 10000 samples using floor method:
+ 0: 9.97%
+ 1: 9.86%
+ 2: 9.47%
+ 3: 9.99%
+ 4: 10.33%
+ 5: 9.99%
+ 6: 9.88%
+ 7: 10.45%
+ 8: 10.33%
+ 9: 9.73%
+
+Output Analysis: uniform(0.0, 10.0)
+Typical Timing: 40 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.014370725680160675
+ Median: (4.932233828685737, 4.934800131365183)
+ Maximum: 9.991743209602872
+ Mean: 4.944711192504797
+ Std Deviation: 2.903933069340305
+Post-processor distribution of 10000 samples using floor method:
+ 0: 9.97%
+ 1: 9.87%
+ 2: 10.1%
+ 3: 9.71%
+ 4: 10.15%
+ 5: 10.05%
+ 6: 9.36%
+ 7: 10.35%
+ 8: 10.29%
+ 9: 10.15%
+
+Base Case
+Output Analysis: Random.expovariate(1.0)
+Typical Timing: 344 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0.00013930738155526723
+ Median: (0.6974151830509201, 0.6982605474669916)
+ Maximum: 7.006299712833918
+ Mean: 0.9851091283909009
+ Std Deviation: 0.9482631726906081
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.02%
+ 1: 23.19%
+ 2: 8.99%
+ 3: 3.01%
+ 4: 1.15%
+ 5: 0.38%
+ 6: 0.16%
+ 7: 0.04%
+ 8: 0.04%
+ 10: 0.01%
+ 13: 0.01%
+
+Output Analysis: expovariate(1.0)
+Typical Timing: 55 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.0005268217098112992
+ Median: (0.7287325498157464, 0.729028105461747)
+ Maximum: 6.423738021042586
+ Mean: 1.010884902851076
+ Std Deviation: 0.9798177662432959
+Post-processor distribution of 10000 samples using floor method:
+ 0: 62.92%
+ 1: 23.47%
+ 2: 8.41%
+ 3: 3.2%
+ 4: 1.3%
+ 5: 0.35%
+ 6: 0.27%
+ 7: 0.05%
+ 8: 0.03%
+
+Base Case
+Output Analysis: Random.gammavariate(2.0, 1.0)
+Typical Timing: 1216 ± 39 ns
+Statistics of 1000 samples:
+ Minimum: 0.022123265128863975
+ Median: (1.6738025588508376, 1.6869422953529067)
+ Maximum: 9.144862623568999
+ Mean: 1.9946207548427557
+ Std Deviation: 1.3831794343166977
+Post-processor distribution of 10000 samples using round method:
+ 0: 9.04%
+ 1: 34.77%
+ 2: 27.07%
+ 3: 15.54%
+ 4: 7.6%
+ 5: 3.25%
+ 6: 1.53%
+ 7: 0.75%
+ 8: 0.21%
+ 9: 0.13%
+ 10: 0.06%
+ 11: 0.01%
+ 12: 0.02%
+ 13: 0.01%
+ 14: 0.01%
+
+Output Analysis: gammavariate(2.0, 1.0)
+Typical Timing: 114 ± 5 ns
+Statistics of 1000 samples:
+ Minimum: 0.05050761827178252
+ Median: (1.7155254242728513, 1.7155403374497076)
+ Maximum: 9.474394865820214
+ Mean: 2.0432583626258274
+ Std Deviation: 1.440053170380605
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.35%
+ 1: 36.19%
+ 2: 26.63%
+ 3: 15.04%
+ 4: 7.56%
+ 5: 3.61%
+ 6: 1.59%
+ 7: 0.58%
+ 8: 0.33%
+ 9: 0.06%
+ 10: 0.03%
+ 11: 0.03%
+
+Base Case
+Output Analysis: Random.weibullvariate(1.0, 1.0)
+Typical Timing: 433 ± 31 ns
+Statistics of 1000 samples:
+ Minimum: 0.0013211102177539506
+ Median: (0.689421374168411, 0.6902805115868248)
+ Maximum: 6.763716954010422
+ Mean: 1.0145977021774952
+ Std Deviation: 1.0058606176825422
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.62%
+ 1: 22.96%
+ 2: 8.29%
+ 3: 3.2%
+ 4: 1.32%
+ 5: 0.36%
+ 6: 0.18%
+ 7: 0.04%
+ 8: 0.01%
+ 10: 0.02%
+
+Output Analysis: weibullvariate(1.0, 1.0)
+Typical Timing: 103 ± 15 ns
+Statistics of 1000 samples:
+ Minimum: 0.00143486573238355
+ Median: (0.6919630243174832, 0.6933880404695633)
+ Maximum: 7.915315904014041
+ Mean: 0.9999870976051519
+ Std Deviation: 1.0199621642753662
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.82%
+ 1: 22.46%
+ 2: 8.53%
+ 3: 3.25%
+ 4: 1.21%
+ 5: 0.47%
+ 6: 0.18%
+ 7: 0.06%
+ 8: 0.01%
+ 9: 0.01%
+
+Base Case
+Output Analysis: Random.betavariate(3.0, 3.0)
+Typical Timing: 2558 ± 78 ns
+Statistics of 1000 samples:
+ Minimum: 0.039839528361731796
+ Median: (0.5015726481908723, 0.5029699817553287)
+ Maximum: 0.9435702178836589
+ Mean: 0.5000214739643288
+ Std Deviation: 0.18805632108618242
+Post-processor distribution of 10000 samples using round method:
+ 0: 49.34%
+ 1: 50.66%
+
+Output Analysis: betavariate(3.0, 3.0)
+Typical Timing: 199 ± 16 ns
+Statistics of 1000 samples:
+ Minimum: 0.014386257468019166
+ Median: (0.5041917967703041, 0.5043820043201677)
+ Maximum: 0.9224068506980523
+ Mean: 0.5036287644629798
+ Std Deviation: 0.19311990407311008
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.03%
+ 1: 49.97%
+
+Base Case
+Output Analysis: Random.paretovariate(4.0)
+Typical Timing: 299 ± 22 ns
+Statistics of 1000 samples:
+ Minimum: 1.0003778533014105
+ Median: (1.165002857930227, 1.165698705069618)
+ Maximum: 10.516678707241427
+ Mean: 1.3111050026121693
+ Std Deviation: 0.5187788907898297
+Post-processor distribution of 10000 samples using floor method:
+ 1: 93.54%
+ 2: 5.2%
+ 3: 0.93%
+ 4: 0.19%
+ 5: 0.03%
+ 6: 0.04%
+ 7: 0.04%
+ 10: 0.01%
+ 11: 0.01%
+ 12: 0.01%
+
+Output Analysis: paretovariate(4.0)
+Typical Timing: 79 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 1.0000021203352474
+ Median: (1.1950046733402977, 1.1960253759614277)
+ Maximum: 4.928427639622488
+ Mean: 1.3384992333095633
+ Std Deviation: 0.44348583284188964
+Post-processor distribution of 10000 samples using floor method:
+ 1: 93.57%
+ 2: 5.14%
+ 3: 0.83%
+ 4: 0.32%
+ 5: 0.08%
+ 6: 0.03%
+ 7: 0.01%
+ 8: 0.01%
+ 9: 0.01%
+
+Base Case
+Output Analysis: Random.gauss(1.0, 1.0)
+Typical Timing: 597 ± 27 ns
+Statistics of 1000 samples:
+ Minimum: -1.9198822626936378
+ Median: (1.005335898102709, 1.011229972843203)
+ Maximum: 3.995102828970162
+ Mean: 1.0036902758611341
+ Std Deviation: 1.0049002779744916
+Post-processor distribution of 10000 samples using round method:
+ -3: 0.01%
+ -2: 0.7%
+ -1: 6.54%
+ 0: 24.32%
+ 1: 37.67%
+ 2: 24.28%
+ 3: 5.86%
+ 4: 0.57%
+ 5: 0.05%
+
+Output Analysis: gauss(1.0, 1.0)
+Typical Timing: 84 ± 2 ns
+Statistics of 1000 samples:
+ Minimum: -2.105377657621053
+ Median: (0.9677613928765401, 0.9738364825460277)
+ Maximum: 3.9619897840596185
+ Mean: 0.9803515870690724
+ Std Deviation: 0.9847928983953689
+Post-processor distribution of 10000 samples using round method:
+ -3: 0.03%
+ -2: 0.58%
+ -1: 6.02%
+ 0: 24.3%
+ 1: 38.52%
+ 2: 23.92%
+ 3: 5.93%
+ 4: 0.67%
+ 5: 0.03%
+
+Base Case
+Output Analysis: Random.normalvariate(0.0, 2.8)
+Typical Timing: 686 ± 22 ns
+Statistics of 1000 samples:
+ Minimum: -9.36705533019951
+ Median: (-0.08343328178059332, -0.07242218755420544)
+ Maximum: 9.638137159093363
+ Mean: 0.015326886488786868
+ Std Deviation: 2.896301190156864
+Post-processor distribution of 10000 samples using round method:
+ -10: 0.03%
+ -9: 0.12%
+ -8: 0.24%
+ -7: 0.71%
+ -6: 1.38%
+ -5: 3.12%
+ -4: 4.93%
+ -3: 8.03%
+ -2: 11.44%
+ -1: 13.25%
+ 0: 14.37%
+ 1: 13.02%
+ 2: 10.66%
+ 3: 8.17%
+ 4: 5.2%
+ 5: 3.02%
+ 6: 1.29%
+ 7: 0.69%
+ 8: 0.22%
+ 9: 0.07%
+ 10: 0.04%
+
+Output Analysis: normalvariate(0.0, 2.8)
+Typical Timing: 84 ± 2 ns
+Statistics of 1000 samples:
+ Minimum: -9.046455801727028
+ Median: (0.004054759430993154, 0.021315402592363517)
+ Maximum: 9.578970261780695
+ Mean: -0.014712782228340401
+ Std Deviation: 2.760000323856411
+Post-processor distribution of 10000 samples using round method:
+ -11: 0.01%
+ -10: 0.04%
+ -9: 0.05%
+ -8: 0.16%
+ -7: 0.69%
+ -6: 1.61%
+ -5: 3.04%
+ -4: 5.24%
+ -3: 7.95%
+ -2: 10.99%
+ -1: 13.18%
+ 0: 14.69%
+ 1: 13.53%
+ 2: 11.0%
+ 3: 7.66%
+ 4: 4.95%
+ 5: 2.59%
+ 6: 1.46%
+ 7: 0.73%
+ 8: 0.3%
+ 9: 0.09%
+ 10: 0.02%
+ 11: 0.01%
+ 13: 0.01%
+
+Base Case
+Output Analysis: Random.lognormvariate(0.0, 0.5)
+Typical Timing: 878 ± 53 ns
+Statistics of 1000 samples:
+ Minimum: 0.2248693655862111
+ Median: (1.0456443550688597, 1.0463295395067145)
+ Maximum: 5.681692998787057
+ Mean: 1.1774875785497383
+ Std Deviation: 0.6355607662063447
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.24%
+ 1: 71.03%
+ 2: 17.45%
+ 3: 2.71%
+ 4: 0.43%
+ 5: 0.11%
+ 6: 0.02%
+ 9: 0.01%
+
+Output Analysis: lognormvariate(0.0, 0.5)
+Typical Timing: 109 ± 9 ns
+Statistics of 1000 samples:
+ Minimum: 0.21215863870079615
+ Median: (0.9708663230257852, 0.971472722331232)
+ Maximum: 4.11173040529319
+ Mean: 1.0903966237459795
+ Std Deviation: 0.5587946576471575
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.65%
+ 1: 70.43%
+ 2: 17.45%
+ 3: 2.91%
+ 4: 0.48%
+ 5: 0.05%
+ 6: 0.03%
+
+Base Case
+Output Analysis: Random.vonmisesvariate(0, 0)
+Typical Timing: 270 ± 21 ns
+Statistics of 1000 samples:
+ Minimum: 0.004918010643852079
+ Median: (3.212229751626989, 3.2201766390537983)
+ Maximum: 6.257997091009342
+ Mean: 3.140987802653663
+ Std Deviation: 1.7890683319823657
+Post-processor distribution of 10000 samples using floor method:
+ 0: 16.05%
+ 1: 16.0%
+ 2: 15.44%
+ 3: 16.56%
+ 4: 15.69%
+ 5: 15.67%
+ 6: 4.59%
+
+Output Analysis: vonmisesvariate(0, 0)
+Typical Timing: 70 ± 9 ns
+Statistics of 1000 samples:
+ Minimum: 0.00460539766627348
+ Median: (3.084578088420162, 3.0866691165283298)
+ Maximum: 6.278298447163166
+ Mean: 3.115976931902511
+ Std Deviation: 1.7888917760687573
+Post-processor distribution of 10000 samples using floor method:
+ 0: 15.94%
+ 1: 15.94%
+ 2: 15.94%
+ 3: 15.77%
+ 4: 15.78%
+ 5: 15.93%
+ 6: 4.7%
+
+Base Case
+Output Analysis: Random.triangular(0.0, 10.0, 0.0)
+Typical Timing: 495 ± 19 ns
+Statistics of 1000 samples:
+ Minimum: 0.003237961622717833
+ Median: (2.756018739981477, 2.77041555411836)
+ Maximum: 9.679493886664185
+ Mean: 3.217204114204818
+ Std Deviation: 2.2695608348990586
+Post-processor distribution of 10000 samples using floor method:
+ 0: 19.81%
+ 1: 16.45%
+ 2: 15.12%
+ 3: 12.91%
+ 4: 11.14%
+ 5: 8.9%
+ 6: 6.77%
+ 7: 4.82%
+ 8: 3.08%
+ 9: 1.0%
+
+Output Analysis: triangular(0.0, 10.0, 0.0)
+Typical Timing: 43 ± 1 ns
+Statistics of 1000 samples:
+ Minimum: 0.0003452204741609677
+ Median: (3.050051144263745, 3.0566898002269616)
+ Maximum: 9.787833018174565
+ Mean: 3.335322504335237
+ Std Deviation: 2.303377888450858
+Post-processor distribution of 10000 samples using floor method:
+ 0: 18.17%
+ 1: 16.9%
+ 2: 15.42%
+ 3: 12.71%
+ 4: 11.34%
+ 5: 9.08%
+ 6: 7.48%
+ 7: 4.89%
+ 8: 3.02%
+ 9: 0.99%
+
+Base Case
+Output Analysis: Random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+Typical Timing: 789 ± 39 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.604
+ Std Deviation: 2.8201390036663083
+Distribution of 10000 samples:
+ 0: 10.18%
+ 1: 9.69%
+ 2: 9.88%
+ 3: 9.94%
+ 4: 10.21%
+ 5: 9.87%
+ 6: 9.82%
+ 7: 10.29%
+ 8: 9.56%
+ 9: 10.56%
+
+Output Analysis: choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+Typical Timing: 75 ± 10 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.531
+ Std Deviation: 2.9125657074133113
+Distribution of 10000 samples:
+ 0: 9.55%
+ 1: 10.29%
+ 2: 9.91%
+ 3: 9.94%
+ 4: 10.03%
+ 5: 10.1%
+ 6: 10.73%
+ 7: 10.19%
+ 8: 10.0%
+ 9: 9.26%
+
+Base Case
+Output Analysis: Random.choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], k=1)
+Typical Timing: 2374 ± 70 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 2.944
+ Std Deviation: 2.4076677511650146
+Distribution of 10000 samples:
+ 0: 17.9%
+ 1: 16.81%
+ 2: 14.91%
+ 3: 12.4%
+ 4: 10.98%
+ 5: 8.8%
+ 6: 7.55%
+ 7: 5.4%
+ 8: 3.54%
+ 9: 1.71%
+
+Output Analysis: choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], k=1)
+Typical Timing: 1147 ± 56 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 3.016
+ Std Deviation: 2.4754280437936385
+Distribution of 10000 samples:
+ 0: 18.44%
+ 1: 16.19%
+ 2: 14.63%
+ 3: 12.99%
+ 4: 10.77%
+ 5: 8.88%
+ 6: 7.59%
+ 7: 5.21%
+ 8: 3.57%
+ 9: 1.73%
+
+Base Case
+Output Analysis: Random.choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], cum_weights=[10, 19, 27, 34, 40, 45, 49, 52, 54, 55], k=1)
+Typical Timing: 1782 ± 52 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 2
+ Maximum: 9
+ Mean: 2.886
+ Std Deviation: 2.4594723011247757
+Distribution of 10000 samples:
+ 0: 17.65%
+ 1: 16.66%
+ 2: 14.8%
+ 3: 12.17%
+ 4: 11.21%
+ 5: 9.01%
+ 6: 7.36%
+ 7: 5.67%
+ 8: 3.66%
+ 9: 1.81%
+
+Output Analysis: choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], cum_weights=[10, 19, 27, 34, 40, 45, 49, 52, 54, 55], k=1)
+Typical Timing: 702 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 3.054
+ Std Deviation: 2.409374192606869
+Distribution of 10000 samples:
+ 0: 17.91%
+ 1: 15.49%
+ 2: 14.94%
+ 3: 12.73%
+ 4: 10.98%
+ 5: 9.59%
+ 6: 7.51%
+ 7: 5.46%
+ 8: 3.54%
+ 9: 1.85%
+
+Base Case
+Timer only: random.shuffle(some_list) of size 10:
+Typical Timing: 8322 ± 1705 ns
+
+Timer only: shuffle(some_list) of size 10:
+Typical Timing: 794 ± 317 ns
+
+Base Case
+Output Analysis: Random.sample([5, 7, 8, 2, 6, 3, 4, 9, 1, 0], k=3)
+Typical Timing: 4137 ± 161 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 9
+ Mean: 4.485
+ Std Deviation: 2.9294666750109997
+Distribution of 10000 samples:
+ 0: 10.03%
+ 1: 10.19%
+ 2: 9.98%
+ 3: 10.05%
+ 4: 9.92%
+ 5: 9.44%
+ 6: 10.59%
+ 7: 9.77%
+ 8: 10.26%
+ 9: 9.77%
+
+Output Analysis: sample([5, 7, 8, 2, 6, 3, 4, 9, 1, 0], k=3)
+Typical Timing: 848 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.568
+ Std Deviation: 2.8631060057217583
+Distribution of 10000 samples:
+ 0: 9.8%
+ 1: 10.03%
+ 2: 10.4%
+ 3: 9.73%
+ 4: 10.17%
+ 5: 10.1%
+ 6: 9.76%
+ 7: 10.08%
+ 8: 10.13%
+ 9: 9.8%
+
+
+Total Test Time: 1.986 sec
+```
+
+
+
+
+%package -n python3-Pyewacket
+Summary: Drop-in Replacement for the Python Random Module.
+Provides: python-Pyewacket
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-Pyewacket
+# Pyewacket
+### Fast, fault-tolerant, drop-in replacement for the Python3 random module
+
+Built on top of the RNG Storm Engine for stability and performance. Storm is a high quality random engine, but totally not appropriate for cryptography of any kind. Pyewacket is meant for games, data science, A.I. and experimental programming, not security.
+
+
+### Quick Install `$ pip install Pyewacket`
+
+
+### Installation may require the following:
+- Python 3.6 or later with dev tools (setuptools, pip, etc.)
+- Cython: Bridge from C/C++ to Python.
+- Modern C++17 Compiler and Standard Library.
+
+
+### Sister Projects:
+- Fortuna: Collection of tools to make custom random value generators. https://pypi.org/project/Fortuna/
+- Pyewacket: Drop-in replacement for the Python3 random module. https://pypi.org/project/Pyewacket/
+- MonkeyScope: Framework for testing non-deterministic generators. https://pypi.org/project/MonkeyScope/
+
+
+# Random Generators
+
+## Random Integers
+- `Pyewacket.randbelow(n: int) -> int`
+ - @param n :: Pyewacket expands the acceptable input domain to include non-positive values of n.
+ - @return :: random integer in range (n, 0] or [0, n) depending on the sign of n.
+
+```python
+from Pyewacket import randbelow
+
+
+randbelow(10) # -> [0, 10)
+randbelow(0) # -> [0, 0) => 0
+randbelow(-10) # -> (-10, 0]
+```
+
+- `Pyewacket.randint(a: int, b: int) -> int`
+ - @param a, b :: inputs to form the output distribution range
+ - @return :: random integer in range [a, b] or [b, a]
+ - Inclusive on both sides
+ - Removed the asymmetric requirement of a < b
+ - When a == b this always returns a
+
+```python
+from Pyewacket import randint
+
+
+randint(1, 10) # -> [1, 10]
+randint(10, 1) # -> [1, 10]
+randint(10, 10) # -> [10, 10] => 10
+```
+
+- `Pyewacket.randrange(start: int, stop: int = 0, step: int = 1) -> int`
+ - @param start :: This is the starting point for the distribution range so long as start <= stop and step >= 0
+ - @param stop :: optional, default=0, stating point iff stop < start.
+ - @param step :: optional, default=1, negative stepping will flip start and stop.
+ - The sign of the step controls the phase of the output, said another way: negative ranges count backwards.
+ - @return :: random integer in range (stop, start] or [start, stop), by increments of |step|
+ - Removed the requirements of start < stop, and step > 0
+ - Always returns start iff start == stop or step == 0
+
+```python
+from Pyewacket import randrange
+
+
+randrange(10) # -> [0, 10) by whole numbers
+randrange(1, 10) # -> [1, 10) by whole numbers
+randrange(1, 10, 2) # -> [1, 10) by 2, odd numbers
+randrange(-10) # -> [-10, 0) by 1
+randrange(10, 1) # -> [1, 10) by 1
+randrange(10, 0, 2) # -> [0, 10) by 2, even numbers
+randrange(10, 10, 0) # -> [10, 10) => 10
+```
+
+## Random Floating Point
+- `Pyewacket.random() -> float`
+ - random float in range [0.0, 1.0] or [0.0, 1.0) depending on rounding, platform specific.
+- `Pyewacket.uniform(a: float, b: float) -> float`
+ - random float in [a, b] or [a, b) depending on rounding
+- `Pyewacket.expovariate(lambd: float) -> float`
+- `Pyewacket.gammavariate(alpha, beta) -> float`
+- `Pyewacket.weibullvariate(alpha, beta) -> float`
+- `Pyewacket.betavariate(alpha, beta) -> float`
+- `Pyewacket.paretovariate(alpha) -> float`
+- `Pyewacket.gauss(mu: float, sigma: float) -> float`
+- `Pyewacket.normalvariate(mu: float, sigma: float) -> float` same as Pyewacket.gauss()
+- `Pyewacket.lognormvariate(mu: float, sigma: float) -> float`
+- `Pyewacket.vonmisesvariate(mu: float, kappa: float) -> float`
+- `Pyewacket.triangular(low: float, high: float, mode: float = None)`
+
+## Random Sequence Values
+- `Pyewacket.choice(seq: List) -> Value`
+ - @param seq :: any zero indexed object like a list or tuple.
+ - @return :: random value from the list, can be any object type that can be put into a list.
+- `Pyewacket.choices(population, weights=None, *, cum_weights=None, k=1)`
+ - @param population :: data values
+ - @param weights :: relative weights
+ - @param cum_weights :: cumulative weights
+ - @param k :: number of samples to be collected
+- `Pyewacket.cumulative_weighted_choice(table, k=1)`
+ - Supports Cumulative Weights only. Convert relative weights to cumulative if needed: `cum_weights = tuple(itertools.accumulate(rel_weights))`
+ - @param table :: two dimensional list or tuple of weighted value pairs. `[(1, "a"), (10, "b"), (100, "c")...]`
+ - The table can be constructed as `tuple(zip(cum_weights, population))` weights always come first.
+ - @param k :: number of samples to be collected. Returns a list of size k if k > 1, otherwise returns a single value - not a list of one.
+- `Pyewacket.shuffle(array: list) -> None`
+ - Shuffles a list in place.
+ - @param array :: must be a mutable list.
+ - Implements Knuth B Shuffle Algorithm. Knuth B is twice as fast as Knuth A or Fisher-Yates for every test case. This is likely due to the combination of walking backward and rotating backward into the back side of the list. With this combination it can never modify the data it still needs to walk through. Fresh snow all the way home, aka very low probability for cache misses.
+- `Pyewacket.sample(population: List, k: int) -> list`
+ - @param population :: list or tuple.
+ - @param k :: number of unique samples to get.
+ - @return :: size k list of unique random samples.
+
+## Hardware & Software Seeding
+- `seed(seed: int=0) -> None`
+ - Hardware seeding is enabled by default. This function is used to turn toggle software seeding and set or reset the engine seed. This affects all random functions in the module.
+ - @param seed :: any non-zero positive integer less than 2**63 enables software seeding.
+ - Calling `seed()` or `seed(0)` will turn off software seeding and re-enable hardware seeding.
+ - While you can toggle software seeding on and off and re-seed the engine at will without error, this function is **not intended to be used inside a tight loop**. General rule: seed once, or better yet, not at all. Typically, software seeding is for debugging a product, hardware seeding is used for product release. Please don't use software seeding for the release version of a game!
+
+
+## Development Log
+##### Pyewacket 1.3.9
+- Installer update
+
+##### Pyewacket 1.3.8
+- Documentation Update
+
+##### Pyewacket 1.3.7
+- Fixed more typos
+
+##### Pyewacket 1.3.6
+- Fixed Typos
+
+##### Pyewacket 1.3.5
+- Installer update
+
+##### Pyewacket 1.3.4
+- Storm 3.2.2 Update.
+
+##### Pyewacket 1.3.3
+- Pyewacket is now compatible with python notebooks.
+
+##### Pyewacket 1.3.2
+- Storm Update
+
+##### Pyewacket 1.3.1
+- Storm Update
+
+##### Pyewacket 1.3.0
+- Major API Update, several utilities have been moved into their own module: MonkeyScope.
+ - distribution_timer
+ - distribution
+ - timer
+
+##### Pyewacket 1.2.4
+- `Pyewacket.randrange()` bug fix
+- Test Update
+
+##### Pyewacket 1.2.3
+- Minor Bug Fix
+
+##### Pyewacket 1.2.2
+- Typo Fix
+
+##### Pyewacket 1.2.1
+- Test Update
+
+##### Pyewacket 1.2.0
+- Storm Update
+
+##### Pyewacket 1.1.2
+- Low level clean up
+
+##### Pyewacket 1.1.1
+- Docs Update
+
+##### Pyewacket 1.1.0
+- Storm Engine Update
+
+##### Pyewacket 1.0.3
+- minor typos
+
+##### Pyewacket 1.0.2
+- added choices alternative `cumulative_weighted_choice`
+
+##### Pyewacket 1.0.1
+- minor typos
+
+##### Pyewacket 1.0.0
+- Storm 2 Rebuild.
+
+##### Pyewacket 0.1.22
+- Small bug fix.
+
+##### Pyewacket 0.1.21
+- Public Release
+
+##### Pyewacket 0.0.2b1
+- Added software seeding.
+
+##### Pyewacket v0.0.1b8
+- Fixed a small bug in the tests.
+
+##### Pyewacket v0.0.1b7
+- Engine Fine Tuning
+- Fixed some typos.
+
+##### Pyewacket v0.0.1b6
+- Rearranged tests to be more consistent and match the documentation.
+
+##### Pyewacket v0.0.1b5
+- Documentation Upgrade
+- Minor Performance Tweaks
+
+##### Pyewacket v0.0.1b4
+- Public Beta
+
+##### Pyewacket v0.0.1b3
+- quick_test()
+- Extended Functionality
+ - sample()
+ - expovariate()
+ - gammavariate()
+ - weibullvariate()
+ - betavariate()
+ - paretovariate()
+ - gauss()
+ - normalvariate()
+ - lognormvariate()
+ - vonmisesvariate()
+ - triangular()
+
+##### Pyewacket v0.0.1b2
+- Basic Functionality
+ - random()
+ - uniform()
+ - randbelow()
+ - randint()
+ - randrange()
+ - choice()
+ - choices()
+ - shuffle()
+
+##### Pyewacket v0.0.1b1
+- Initial Design & Planning
+
+
+## Distribution and Performance Tests
+```
+MonkeyScope: Pyewacket
+
+Base Case
+Output Analysis: Random._randbelow(10)
+Typical Timing: 581 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.557
+ Std Deviation: 2.8430179387404504
+Distribution of 10000 samples:
+ 0: 9.9%
+ 1: 10.19%
+ 2: 10.64%
+ 3: 10.21%
+ 4: 10.19%
+ 5: 10.02%
+ 6: 10.09%
+ 7: 9.63%
+ 8: 9.47%
+ 9: 9.66%
+
+Output Analysis: randbelow(10)
+Typical Timing: 67 ± 10 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 9
+ Mean: 4.425
+ Std Deviation: 2.8692115641757754
+Distribution of 10000 samples:
+ 0: 9.92%
+ 1: 9.48%
+ 2: 10.36%
+ 3: 10.7%
+ 4: 9.92%
+ 5: 9.85%
+ 6: 10.38%
+ 7: 9.96%
+ 8: 9.76%
+ 9: 9.67%
+
+Base Case
+Output Analysis: Random.randint(1, 10)
+Typical Timing: 1148 ± 71 ns
+Statistics of 1000 samples:
+ Minimum: 1
+ Median: 5
+ Maximum: 10
+ Mean: 5.394
+ Std Deviation: 2.8500463154131372
+Distribution of 10000 samples:
+ 1: 10.1%
+ 2: 10.43%
+ 3: 9.63%
+ 4: 9.85%
+ 5: 9.46%
+ 6: 9.83%
+ 7: 10.15%
+ 8: 10.7%
+ 9: 9.64%
+ 10: 10.21%
+
+Output Analysis: randint(1, 10)
+Typical Timing: 61 ± 8 ns
+Statistics of 1000 samples:
+ Minimum: 1
+ Median: 6
+ Maximum: 10
+ Mean: 5.566
+ Std Deviation: 2.871871167026822
+Distribution of 10000 samples:
+ 1: 10.52%
+ 2: 9.61%
+ 3: 9.96%
+ 4: 10.1%
+ 5: 9.95%
+ 6: 9.38%
+ 7: 10.66%
+ 8: 9.84%
+ 9: 10.13%
+ 10: 9.85%
+
+Base Case
+Output Analysis: Random.randrange(0, 10, 2)
+Typical Timing: 1248 ± 73 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 8
+ Mean: 3.946
+ Std Deviation: 2.7873076615257237
+Distribution of 10000 samples:
+ 0: 20.18%
+ 2: 19.76%
+ 4: 21.0%
+ 6: 19.9%
+ 8: 19.16%
+
+Output Analysis: randrange(0, 10, 2)
+Typical Timing: 98 ± 16 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 8
+ Mean: 3.834
+ Std Deviation: 2.8072128526351547
+Distribution of 10000 samples:
+ 0: 20.61%
+ 2: 20.39%
+ 4: 20.07%
+ 6: 19.58%
+ 8: 19.35%
+
+Base Case
+Output Analysis: Random.random()
+Typical Timing: 37 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.0022025335119719713
+ Median: (0.504236734486946, 0.5043377592978666)
+ Maximum: 0.9988675528749947
+ Mean: 0.4992614084502893
+ Std Deviation: 0.29450740919885326
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.17%
+ 1: 49.83%
+
+Output Analysis: random()
+Typical Timing: 36 ± 1 ns
+Statistics of 1000 samples:
+ Minimum: 0.0005611174645538731
+ Median: (0.5035689629010788, 0.5043732233487602)
+ Maximum: 0.9997053348692302
+ Mean: 0.5062137836044255
+ Std Deviation: 0.2872867534109569
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.19%
+ 1: 49.81%
+
+Base Case
+Output Analysis: Random.uniform(0.0, 10.0)
+Typical Timing: 239 ± 21 ns
+Statistics of 1000 samples:
+ Minimum: 0.00855387357446502
+ Median: (4.8377420821319275, 4.839112429261609)
+ Maximum: 9.944528377056002
+ Mean: 4.985114491741573
+ Std Deviation: 2.854828406573762
+Post-processor distribution of 10000 samples using floor method:
+ 0: 9.97%
+ 1: 9.86%
+ 2: 9.47%
+ 3: 9.99%
+ 4: 10.33%
+ 5: 9.99%
+ 6: 9.88%
+ 7: 10.45%
+ 8: 10.33%
+ 9: 9.73%
+
+Output Analysis: uniform(0.0, 10.0)
+Typical Timing: 40 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.014370725680160675
+ Median: (4.932233828685737, 4.934800131365183)
+ Maximum: 9.991743209602872
+ Mean: 4.944711192504797
+ Std Deviation: 2.903933069340305
+Post-processor distribution of 10000 samples using floor method:
+ 0: 9.97%
+ 1: 9.87%
+ 2: 10.1%
+ 3: 9.71%
+ 4: 10.15%
+ 5: 10.05%
+ 6: 9.36%
+ 7: 10.35%
+ 8: 10.29%
+ 9: 10.15%
+
+Base Case
+Output Analysis: Random.expovariate(1.0)
+Typical Timing: 344 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0.00013930738155526723
+ Median: (0.6974151830509201, 0.6982605474669916)
+ Maximum: 7.006299712833918
+ Mean: 0.9851091283909009
+ Std Deviation: 0.9482631726906081
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.02%
+ 1: 23.19%
+ 2: 8.99%
+ 3: 3.01%
+ 4: 1.15%
+ 5: 0.38%
+ 6: 0.16%
+ 7: 0.04%
+ 8: 0.04%
+ 10: 0.01%
+ 13: 0.01%
+
+Output Analysis: expovariate(1.0)
+Typical Timing: 55 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.0005268217098112992
+ Median: (0.7287325498157464, 0.729028105461747)
+ Maximum: 6.423738021042586
+ Mean: 1.010884902851076
+ Std Deviation: 0.9798177662432959
+Post-processor distribution of 10000 samples using floor method:
+ 0: 62.92%
+ 1: 23.47%
+ 2: 8.41%
+ 3: 3.2%
+ 4: 1.3%
+ 5: 0.35%
+ 6: 0.27%
+ 7: 0.05%
+ 8: 0.03%
+
+Base Case
+Output Analysis: Random.gammavariate(2.0, 1.0)
+Typical Timing: 1216 ± 39 ns
+Statistics of 1000 samples:
+ Minimum: 0.022123265128863975
+ Median: (1.6738025588508376, 1.6869422953529067)
+ Maximum: 9.144862623568999
+ Mean: 1.9946207548427557
+ Std Deviation: 1.3831794343166977
+Post-processor distribution of 10000 samples using round method:
+ 0: 9.04%
+ 1: 34.77%
+ 2: 27.07%
+ 3: 15.54%
+ 4: 7.6%
+ 5: 3.25%
+ 6: 1.53%
+ 7: 0.75%
+ 8: 0.21%
+ 9: 0.13%
+ 10: 0.06%
+ 11: 0.01%
+ 12: 0.02%
+ 13: 0.01%
+ 14: 0.01%
+
+Output Analysis: gammavariate(2.0, 1.0)
+Typical Timing: 114 ± 5 ns
+Statistics of 1000 samples:
+ Minimum: 0.05050761827178252
+ Median: (1.7155254242728513, 1.7155403374497076)
+ Maximum: 9.474394865820214
+ Mean: 2.0432583626258274
+ Std Deviation: 1.440053170380605
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.35%
+ 1: 36.19%
+ 2: 26.63%
+ 3: 15.04%
+ 4: 7.56%
+ 5: 3.61%
+ 6: 1.59%
+ 7: 0.58%
+ 8: 0.33%
+ 9: 0.06%
+ 10: 0.03%
+ 11: 0.03%
+
+Base Case
+Output Analysis: Random.weibullvariate(1.0, 1.0)
+Typical Timing: 433 ± 31 ns
+Statistics of 1000 samples:
+ Minimum: 0.0013211102177539506
+ Median: (0.689421374168411, 0.6902805115868248)
+ Maximum: 6.763716954010422
+ Mean: 1.0145977021774952
+ Std Deviation: 1.0058606176825422
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.62%
+ 1: 22.96%
+ 2: 8.29%
+ 3: 3.2%
+ 4: 1.32%
+ 5: 0.36%
+ 6: 0.18%
+ 7: 0.04%
+ 8: 0.01%
+ 10: 0.02%
+
+Output Analysis: weibullvariate(1.0, 1.0)
+Typical Timing: 103 ± 15 ns
+Statistics of 1000 samples:
+ Minimum: 0.00143486573238355
+ Median: (0.6919630243174832, 0.6933880404695633)
+ Maximum: 7.915315904014041
+ Mean: 0.9999870976051519
+ Std Deviation: 1.0199621642753662
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.82%
+ 1: 22.46%
+ 2: 8.53%
+ 3: 3.25%
+ 4: 1.21%
+ 5: 0.47%
+ 6: 0.18%
+ 7: 0.06%
+ 8: 0.01%
+ 9: 0.01%
+
+Base Case
+Output Analysis: Random.betavariate(3.0, 3.0)
+Typical Timing: 2558 ± 78 ns
+Statistics of 1000 samples:
+ Minimum: 0.039839528361731796
+ Median: (0.5015726481908723, 0.5029699817553287)
+ Maximum: 0.9435702178836589
+ Mean: 0.5000214739643288
+ Std Deviation: 0.18805632108618242
+Post-processor distribution of 10000 samples using round method:
+ 0: 49.34%
+ 1: 50.66%
+
+Output Analysis: betavariate(3.0, 3.0)
+Typical Timing: 199 ± 16 ns
+Statistics of 1000 samples:
+ Minimum: 0.014386257468019166
+ Median: (0.5041917967703041, 0.5043820043201677)
+ Maximum: 0.9224068506980523
+ Mean: 0.5036287644629798
+ Std Deviation: 0.19311990407311008
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.03%
+ 1: 49.97%
+
+Base Case
+Output Analysis: Random.paretovariate(4.0)
+Typical Timing: 299 ± 22 ns
+Statistics of 1000 samples:
+ Minimum: 1.0003778533014105
+ Median: (1.165002857930227, 1.165698705069618)
+ Maximum: 10.516678707241427
+ Mean: 1.3111050026121693
+ Std Deviation: 0.5187788907898297
+Post-processor distribution of 10000 samples using floor method:
+ 1: 93.54%
+ 2: 5.2%
+ 3: 0.93%
+ 4: 0.19%
+ 5: 0.03%
+ 6: 0.04%
+ 7: 0.04%
+ 10: 0.01%
+ 11: 0.01%
+ 12: 0.01%
+
+Output Analysis: paretovariate(4.0)
+Typical Timing: 79 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 1.0000021203352474
+ Median: (1.1950046733402977, 1.1960253759614277)
+ Maximum: 4.928427639622488
+ Mean: 1.3384992333095633
+ Std Deviation: 0.44348583284188964
+Post-processor distribution of 10000 samples using floor method:
+ 1: 93.57%
+ 2: 5.14%
+ 3: 0.83%
+ 4: 0.32%
+ 5: 0.08%
+ 6: 0.03%
+ 7: 0.01%
+ 8: 0.01%
+ 9: 0.01%
+
+Base Case
+Output Analysis: Random.gauss(1.0, 1.0)
+Typical Timing: 597 ± 27 ns
+Statistics of 1000 samples:
+ Minimum: -1.9198822626936378
+ Median: (1.005335898102709, 1.011229972843203)
+ Maximum: 3.995102828970162
+ Mean: 1.0036902758611341
+ Std Deviation: 1.0049002779744916
+Post-processor distribution of 10000 samples using round method:
+ -3: 0.01%
+ -2: 0.7%
+ -1: 6.54%
+ 0: 24.32%
+ 1: 37.67%
+ 2: 24.28%
+ 3: 5.86%
+ 4: 0.57%
+ 5: 0.05%
+
+Output Analysis: gauss(1.0, 1.0)
+Typical Timing: 84 ± 2 ns
+Statistics of 1000 samples:
+ Minimum: -2.105377657621053
+ Median: (0.9677613928765401, 0.9738364825460277)
+ Maximum: 3.9619897840596185
+ Mean: 0.9803515870690724
+ Std Deviation: 0.9847928983953689
+Post-processor distribution of 10000 samples using round method:
+ -3: 0.03%
+ -2: 0.58%
+ -1: 6.02%
+ 0: 24.3%
+ 1: 38.52%
+ 2: 23.92%
+ 3: 5.93%
+ 4: 0.67%
+ 5: 0.03%
+
+Base Case
+Output Analysis: Random.normalvariate(0.0, 2.8)
+Typical Timing: 686 ± 22 ns
+Statistics of 1000 samples:
+ Minimum: -9.36705533019951
+ Median: (-0.08343328178059332, -0.07242218755420544)
+ Maximum: 9.638137159093363
+ Mean: 0.015326886488786868
+ Std Deviation: 2.896301190156864
+Post-processor distribution of 10000 samples using round method:
+ -10: 0.03%
+ -9: 0.12%
+ -8: 0.24%
+ -7: 0.71%
+ -6: 1.38%
+ -5: 3.12%
+ -4: 4.93%
+ -3: 8.03%
+ -2: 11.44%
+ -1: 13.25%
+ 0: 14.37%
+ 1: 13.02%
+ 2: 10.66%
+ 3: 8.17%
+ 4: 5.2%
+ 5: 3.02%
+ 6: 1.29%
+ 7: 0.69%
+ 8: 0.22%
+ 9: 0.07%
+ 10: 0.04%
+
+Output Analysis: normalvariate(0.0, 2.8)
+Typical Timing: 84 ± 2 ns
+Statistics of 1000 samples:
+ Minimum: -9.046455801727028
+ Median: (0.004054759430993154, 0.021315402592363517)
+ Maximum: 9.578970261780695
+ Mean: -0.014712782228340401
+ Std Deviation: 2.760000323856411
+Post-processor distribution of 10000 samples using round method:
+ -11: 0.01%
+ -10: 0.04%
+ -9: 0.05%
+ -8: 0.16%
+ -7: 0.69%
+ -6: 1.61%
+ -5: 3.04%
+ -4: 5.24%
+ -3: 7.95%
+ -2: 10.99%
+ -1: 13.18%
+ 0: 14.69%
+ 1: 13.53%
+ 2: 11.0%
+ 3: 7.66%
+ 4: 4.95%
+ 5: 2.59%
+ 6: 1.46%
+ 7: 0.73%
+ 8: 0.3%
+ 9: 0.09%
+ 10: 0.02%
+ 11: 0.01%
+ 13: 0.01%
+
+Base Case
+Output Analysis: Random.lognormvariate(0.0, 0.5)
+Typical Timing: 878 ± 53 ns
+Statistics of 1000 samples:
+ Minimum: 0.2248693655862111
+ Median: (1.0456443550688597, 1.0463295395067145)
+ Maximum: 5.681692998787057
+ Mean: 1.1774875785497383
+ Std Deviation: 0.6355607662063447
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.24%
+ 1: 71.03%
+ 2: 17.45%
+ 3: 2.71%
+ 4: 0.43%
+ 5: 0.11%
+ 6: 0.02%
+ 9: 0.01%
+
+Output Analysis: lognormvariate(0.0, 0.5)
+Typical Timing: 109 ± 9 ns
+Statistics of 1000 samples:
+ Minimum: 0.21215863870079615
+ Median: (0.9708663230257852, 0.971472722331232)
+ Maximum: 4.11173040529319
+ Mean: 1.0903966237459795
+ Std Deviation: 0.5587946576471575
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.65%
+ 1: 70.43%
+ 2: 17.45%
+ 3: 2.91%
+ 4: 0.48%
+ 5: 0.05%
+ 6: 0.03%
+
+Base Case
+Output Analysis: Random.vonmisesvariate(0, 0)
+Typical Timing: 270 ± 21 ns
+Statistics of 1000 samples:
+ Minimum: 0.004918010643852079
+ Median: (3.212229751626989, 3.2201766390537983)
+ Maximum: 6.257997091009342
+ Mean: 3.140987802653663
+ Std Deviation: 1.7890683319823657
+Post-processor distribution of 10000 samples using floor method:
+ 0: 16.05%
+ 1: 16.0%
+ 2: 15.44%
+ 3: 16.56%
+ 4: 15.69%
+ 5: 15.67%
+ 6: 4.59%
+
+Output Analysis: vonmisesvariate(0, 0)
+Typical Timing: 70 ± 9 ns
+Statistics of 1000 samples:
+ Minimum: 0.00460539766627348
+ Median: (3.084578088420162, 3.0866691165283298)
+ Maximum: 6.278298447163166
+ Mean: 3.115976931902511
+ Std Deviation: 1.7888917760687573
+Post-processor distribution of 10000 samples using floor method:
+ 0: 15.94%
+ 1: 15.94%
+ 2: 15.94%
+ 3: 15.77%
+ 4: 15.78%
+ 5: 15.93%
+ 6: 4.7%
+
+Base Case
+Output Analysis: Random.triangular(0.0, 10.0, 0.0)
+Typical Timing: 495 ± 19 ns
+Statistics of 1000 samples:
+ Minimum: 0.003237961622717833
+ Median: (2.756018739981477, 2.77041555411836)
+ Maximum: 9.679493886664185
+ Mean: 3.217204114204818
+ Std Deviation: 2.2695608348990586
+Post-processor distribution of 10000 samples using floor method:
+ 0: 19.81%
+ 1: 16.45%
+ 2: 15.12%
+ 3: 12.91%
+ 4: 11.14%
+ 5: 8.9%
+ 6: 6.77%
+ 7: 4.82%
+ 8: 3.08%
+ 9: 1.0%
+
+Output Analysis: triangular(0.0, 10.0, 0.0)
+Typical Timing: 43 ± 1 ns
+Statistics of 1000 samples:
+ Minimum: 0.0003452204741609677
+ Median: (3.050051144263745, 3.0566898002269616)
+ Maximum: 9.787833018174565
+ Mean: 3.335322504335237
+ Std Deviation: 2.303377888450858
+Post-processor distribution of 10000 samples using floor method:
+ 0: 18.17%
+ 1: 16.9%
+ 2: 15.42%
+ 3: 12.71%
+ 4: 11.34%
+ 5: 9.08%
+ 6: 7.48%
+ 7: 4.89%
+ 8: 3.02%
+ 9: 0.99%
+
+Base Case
+Output Analysis: Random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+Typical Timing: 789 ± 39 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.604
+ Std Deviation: 2.8201390036663083
+Distribution of 10000 samples:
+ 0: 10.18%
+ 1: 9.69%
+ 2: 9.88%
+ 3: 9.94%
+ 4: 10.21%
+ 5: 9.87%
+ 6: 9.82%
+ 7: 10.29%
+ 8: 9.56%
+ 9: 10.56%
+
+Output Analysis: choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+Typical Timing: 75 ± 10 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.531
+ Std Deviation: 2.9125657074133113
+Distribution of 10000 samples:
+ 0: 9.55%
+ 1: 10.29%
+ 2: 9.91%
+ 3: 9.94%
+ 4: 10.03%
+ 5: 10.1%
+ 6: 10.73%
+ 7: 10.19%
+ 8: 10.0%
+ 9: 9.26%
+
+Base Case
+Output Analysis: Random.choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], k=1)
+Typical Timing: 2374 ± 70 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 2.944
+ Std Deviation: 2.4076677511650146
+Distribution of 10000 samples:
+ 0: 17.9%
+ 1: 16.81%
+ 2: 14.91%
+ 3: 12.4%
+ 4: 10.98%
+ 5: 8.8%
+ 6: 7.55%
+ 7: 5.4%
+ 8: 3.54%
+ 9: 1.71%
+
+Output Analysis: choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], k=1)
+Typical Timing: 1147 ± 56 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 3.016
+ Std Deviation: 2.4754280437936385
+Distribution of 10000 samples:
+ 0: 18.44%
+ 1: 16.19%
+ 2: 14.63%
+ 3: 12.99%
+ 4: 10.77%
+ 5: 8.88%
+ 6: 7.59%
+ 7: 5.21%
+ 8: 3.57%
+ 9: 1.73%
+
+Base Case
+Output Analysis: Random.choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], cum_weights=[10, 19, 27, 34, 40, 45, 49, 52, 54, 55], k=1)
+Typical Timing: 1782 ± 52 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 2
+ Maximum: 9
+ Mean: 2.886
+ Std Deviation: 2.4594723011247757
+Distribution of 10000 samples:
+ 0: 17.65%
+ 1: 16.66%
+ 2: 14.8%
+ 3: 12.17%
+ 4: 11.21%
+ 5: 9.01%
+ 6: 7.36%
+ 7: 5.67%
+ 8: 3.66%
+ 9: 1.81%
+
+Output Analysis: choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], cum_weights=[10, 19, 27, 34, 40, 45, 49, 52, 54, 55], k=1)
+Typical Timing: 702 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 3.054
+ Std Deviation: 2.409374192606869
+Distribution of 10000 samples:
+ 0: 17.91%
+ 1: 15.49%
+ 2: 14.94%
+ 3: 12.73%
+ 4: 10.98%
+ 5: 9.59%
+ 6: 7.51%
+ 7: 5.46%
+ 8: 3.54%
+ 9: 1.85%
+
+Base Case
+Timer only: random.shuffle(some_list) of size 10:
+Typical Timing: 8322 ± 1705 ns
+
+Timer only: shuffle(some_list) of size 10:
+Typical Timing: 794 ± 317 ns
+
+Base Case
+Output Analysis: Random.sample([5, 7, 8, 2, 6, 3, 4, 9, 1, 0], k=3)
+Typical Timing: 4137 ± 161 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 9
+ Mean: 4.485
+ Std Deviation: 2.9294666750109997
+Distribution of 10000 samples:
+ 0: 10.03%
+ 1: 10.19%
+ 2: 9.98%
+ 3: 10.05%
+ 4: 9.92%
+ 5: 9.44%
+ 6: 10.59%
+ 7: 9.77%
+ 8: 10.26%
+ 9: 9.77%
+
+Output Analysis: sample([5, 7, 8, 2, 6, 3, 4, 9, 1, 0], k=3)
+Typical Timing: 848 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.568
+ Std Deviation: 2.8631060057217583
+Distribution of 10000 samples:
+ 0: 9.8%
+ 1: 10.03%
+ 2: 10.4%
+ 3: 9.73%
+ 4: 10.17%
+ 5: 10.1%
+ 6: 9.76%
+ 7: 10.08%
+ 8: 10.13%
+ 9: 9.8%
+
+
+Total Test Time: 1.986 sec
+```
+
+
+
+
+%package help
+Summary: Development documents and examples for Pyewacket
+Provides: python3-Pyewacket-doc
+%description help
+# Pyewacket
+### Fast, fault-tolerant, drop-in replacement for the Python3 random module
+
+Built on top of the RNG Storm Engine for stability and performance. Storm is a high quality random engine, but totally not appropriate for cryptography of any kind. Pyewacket is meant for games, data science, A.I. and experimental programming, not security.
+
+
+### Quick Install `$ pip install Pyewacket`
+
+
+### Installation may require the following:
+- Python 3.6 or later with dev tools (setuptools, pip, etc.)
+- Cython: Bridge from C/C++ to Python.
+- Modern C++17 Compiler and Standard Library.
+
+
+### Sister Projects:
+- Fortuna: Collection of tools to make custom random value generators. https://pypi.org/project/Fortuna/
+- Pyewacket: Drop-in replacement for the Python3 random module. https://pypi.org/project/Pyewacket/
+- MonkeyScope: Framework for testing non-deterministic generators. https://pypi.org/project/MonkeyScope/
+
+
+# Random Generators
+
+## Random Integers
+- `Pyewacket.randbelow(n: int) -> int`
+ - @param n :: Pyewacket expands the acceptable input domain to include non-positive values of n.
+ - @return :: random integer in range (n, 0] or [0, n) depending on the sign of n.
+
+```python
+from Pyewacket import randbelow
+
+
+randbelow(10) # -> [0, 10)
+randbelow(0) # -> [0, 0) => 0
+randbelow(-10) # -> (-10, 0]
+```
+
+- `Pyewacket.randint(a: int, b: int) -> int`
+ - @param a, b :: inputs to form the output distribution range
+ - @return :: random integer in range [a, b] or [b, a]
+ - Inclusive on both sides
+ - Removed the asymmetric requirement of a < b
+ - When a == b this always returns a
+
+```python
+from Pyewacket import randint
+
+
+randint(1, 10) # -> [1, 10]
+randint(10, 1) # -> [1, 10]
+randint(10, 10) # -> [10, 10] => 10
+```
+
+- `Pyewacket.randrange(start: int, stop: int = 0, step: int = 1) -> int`
+ - @param start :: This is the starting point for the distribution range so long as start <= stop and step >= 0
+ - @param stop :: optional, default=0, stating point iff stop < start.
+ - @param step :: optional, default=1, negative stepping will flip start and stop.
+ - The sign of the step controls the phase of the output, said another way: negative ranges count backwards.
+ - @return :: random integer in range (stop, start] or [start, stop), by increments of |step|
+ - Removed the requirements of start < stop, and step > 0
+ - Always returns start iff start == stop or step == 0
+
+```python
+from Pyewacket import randrange
+
+
+randrange(10) # -> [0, 10) by whole numbers
+randrange(1, 10) # -> [1, 10) by whole numbers
+randrange(1, 10, 2) # -> [1, 10) by 2, odd numbers
+randrange(-10) # -> [-10, 0) by 1
+randrange(10, 1) # -> [1, 10) by 1
+randrange(10, 0, 2) # -> [0, 10) by 2, even numbers
+randrange(10, 10, 0) # -> [10, 10) => 10
+```
+
+## Random Floating Point
+- `Pyewacket.random() -> float`
+ - random float in range [0.0, 1.0] or [0.0, 1.0) depending on rounding, platform specific.
+- `Pyewacket.uniform(a: float, b: float) -> float`
+ - random float in [a, b] or [a, b) depending on rounding
+- `Pyewacket.expovariate(lambd: float) -> float`
+- `Pyewacket.gammavariate(alpha, beta) -> float`
+- `Pyewacket.weibullvariate(alpha, beta) -> float`
+- `Pyewacket.betavariate(alpha, beta) -> float`
+- `Pyewacket.paretovariate(alpha) -> float`
+- `Pyewacket.gauss(mu: float, sigma: float) -> float`
+- `Pyewacket.normalvariate(mu: float, sigma: float) -> float` same as Pyewacket.gauss()
+- `Pyewacket.lognormvariate(mu: float, sigma: float) -> float`
+- `Pyewacket.vonmisesvariate(mu: float, kappa: float) -> float`
+- `Pyewacket.triangular(low: float, high: float, mode: float = None)`
+
+## Random Sequence Values
+- `Pyewacket.choice(seq: List) -> Value`
+ - @param seq :: any zero indexed object like a list or tuple.
+ - @return :: random value from the list, can be any object type that can be put into a list.
+- `Pyewacket.choices(population, weights=None, *, cum_weights=None, k=1)`
+ - @param population :: data values
+ - @param weights :: relative weights
+ - @param cum_weights :: cumulative weights
+ - @param k :: number of samples to be collected
+- `Pyewacket.cumulative_weighted_choice(table, k=1)`
+ - Supports Cumulative Weights only. Convert relative weights to cumulative if needed: `cum_weights = tuple(itertools.accumulate(rel_weights))`
+ - @param table :: two dimensional list or tuple of weighted value pairs. `[(1, "a"), (10, "b"), (100, "c")...]`
+ - The table can be constructed as `tuple(zip(cum_weights, population))` weights always come first.
+ - @param k :: number of samples to be collected. Returns a list of size k if k > 1, otherwise returns a single value - not a list of one.
+- `Pyewacket.shuffle(array: list) -> None`
+ - Shuffles a list in place.
+ - @param array :: must be a mutable list.
+ - Implements Knuth B Shuffle Algorithm. Knuth B is twice as fast as Knuth A or Fisher-Yates for every test case. This is likely due to the combination of walking backward and rotating backward into the back side of the list. With this combination it can never modify the data it still needs to walk through. Fresh snow all the way home, aka very low probability for cache misses.
+- `Pyewacket.sample(population: List, k: int) -> list`
+ - @param population :: list or tuple.
+ - @param k :: number of unique samples to get.
+ - @return :: size k list of unique random samples.
+
+## Hardware & Software Seeding
+- `seed(seed: int=0) -> None`
+ - Hardware seeding is enabled by default. This function is used to turn toggle software seeding and set or reset the engine seed. This affects all random functions in the module.
+ - @param seed :: any non-zero positive integer less than 2**63 enables software seeding.
+ - Calling `seed()` or `seed(0)` will turn off software seeding and re-enable hardware seeding.
+ - While you can toggle software seeding on and off and re-seed the engine at will without error, this function is **not intended to be used inside a tight loop**. General rule: seed once, or better yet, not at all. Typically, software seeding is for debugging a product, hardware seeding is used for product release. Please don't use software seeding for the release version of a game!
+
+
+## Development Log
+##### Pyewacket 1.3.9
+- Installer update
+
+##### Pyewacket 1.3.8
+- Documentation Update
+
+##### Pyewacket 1.3.7
+- Fixed more typos
+
+##### Pyewacket 1.3.6
+- Fixed Typos
+
+##### Pyewacket 1.3.5
+- Installer update
+
+##### Pyewacket 1.3.4
+- Storm 3.2.2 Update.
+
+##### Pyewacket 1.3.3
+- Pyewacket is now compatible with python notebooks.
+
+##### Pyewacket 1.3.2
+- Storm Update
+
+##### Pyewacket 1.3.1
+- Storm Update
+
+##### Pyewacket 1.3.0
+- Major API Update, several utilities have been moved into their own module: MonkeyScope.
+ - distribution_timer
+ - distribution
+ - timer
+
+##### Pyewacket 1.2.4
+- `Pyewacket.randrange()` bug fix
+- Test Update
+
+##### Pyewacket 1.2.3
+- Minor Bug Fix
+
+##### Pyewacket 1.2.2
+- Typo Fix
+
+##### Pyewacket 1.2.1
+- Test Update
+
+##### Pyewacket 1.2.0
+- Storm Update
+
+##### Pyewacket 1.1.2
+- Low level clean up
+
+##### Pyewacket 1.1.1
+- Docs Update
+
+##### Pyewacket 1.1.0
+- Storm Engine Update
+
+##### Pyewacket 1.0.3
+- minor typos
+
+##### Pyewacket 1.0.2
+- added choices alternative `cumulative_weighted_choice`
+
+##### Pyewacket 1.0.1
+- minor typos
+
+##### Pyewacket 1.0.0
+- Storm 2 Rebuild.
+
+##### Pyewacket 0.1.22
+- Small bug fix.
+
+##### Pyewacket 0.1.21
+- Public Release
+
+##### Pyewacket 0.0.2b1
+- Added software seeding.
+
+##### Pyewacket v0.0.1b8
+- Fixed a small bug in the tests.
+
+##### Pyewacket v0.0.1b7
+- Engine Fine Tuning
+- Fixed some typos.
+
+##### Pyewacket v0.0.1b6
+- Rearranged tests to be more consistent and match the documentation.
+
+##### Pyewacket v0.0.1b5
+- Documentation Upgrade
+- Minor Performance Tweaks
+
+##### Pyewacket v0.0.1b4
+- Public Beta
+
+##### Pyewacket v0.0.1b3
+- quick_test()
+- Extended Functionality
+ - sample()
+ - expovariate()
+ - gammavariate()
+ - weibullvariate()
+ - betavariate()
+ - paretovariate()
+ - gauss()
+ - normalvariate()
+ - lognormvariate()
+ - vonmisesvariate()
+ - triangular()
+
+##### Pyewacket v0.0.1b2
+- Basic Functionality
+ - random()
+ - uniform()
+ - randbelow()
+ - randint()
+ - randrange()
+ - choice()
+ - choices()
+ - shuffle()
+
+##### Pyewacket v0.0.1b1
+- Initial Design & Planning
+
+
+## Distribution and Performance Tests
+```
+MonkeyScope: Pyewacket
+
+Base Case
+Output Analysis: Random._randbelow(10)
+Typical Timing: 581 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.557
+ Std Deviation: 2.8430179387404504
+Distribution of 10000 samples:
+ 0: 9.9%
+ 1: 10.19%
+ 2: 10.64%
+ 3: 10.21%
+ 4: 10.19%
+ 5: 10.02%
+ 6: 10.09%
+ 7: 9.63%
+ 8: 9.47%
+ 9: 9.66%
+
+Output Analysis: randbelow(10)
+Typical Timing: 67 ± 10 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 9
+ Mean: 4.425
+ Std Deviation: 2.8692115641757754
+Distribution of 10000 samples:
+ 0: 9.92%
+ 1: 9.48%
+ 2: 10.36%
+ 3: 10.7%
+ 4: 9.92%
+ 5: 9.85%
+ 6: 10.38%
+ 7: 9.96%
+ 8: 9.76%
+ 9: 9.67%
+
+Base Case
+Output Analysis: Random.randint(1, 10)
+Typical Timing: 1148 ± 71 ns
+Statistics of 1000 samples:
+ Minimum: 1
+ Median: 5
+ Maximum: 10
+ Mean: 5.394
+ Std Deviation: 2.8500463154131372
+Distribution of 10000 samples:
+ 1: 10.1%
+ 2: 10.43%
+ 3: 9.63%
+ 4: 9.85%
+ 5: 9.46%
+ 6: 9.83%
+ 7: 10.15%
+ 8: 10.7%
+ 9: 9.64%
+ 10: 10.21%
+
+Output Analysis: randint(1, 10)
+Typical Timing: 61 ± 8 ns
+Statistics of 1000 samples:
+ Minimum: 1
+ Median: 6
+ Maximum: 10
+ Mean: 5.566
+ Std Deviation: 2.871871167026822
+Distribution of 10000 samples:
+ 1: 10.52%
+ 2: 9.61%
+ 3: 9.96%
+ 4: 10.1%
+ 5: 9.95%
+ 6: 9.38%
+ 7: 10.66%
+ 8: 9.84%
+ 9: 10.13%
+ 10: 9.85%
+
+Base Case
+Output Analysis: Random.randrange(0, 10, 2)
+Typical Timing: 1248 ± 73 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 8
+ Mean: 3.946
+ Std Deviation: 2.7873076615257237
+Distribution of 10000 samples:
+ 0: 20.18%
+ 2: 19.76%
+ 4: 21.0%
+ 6: 19.9%
+ 8: 19.16%
+
+Output Analysis: randrange(0, 10, 2)
+Typical Timing: 98 ± 16 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 8
+ Mean: 3.834
+ Std Deviation: 2.8072128526351547
+Distribution of 10000 samples:
+ 0: 20.61%
+ 2: 20.39%
+ 4: 20.07%
+ 6: 19.58%
+ 8: 19.35%
+
+Base Case
+Output Analysis: Random.random()
+Typical Timing: 37 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.0022025335119719713
+ Median: (0.504236734486946, 0.5043377592978666)
+ Maximum: 0.9988675528749947
+ Mean: 0.4992614084502893
+ Std Deviation: 0.29450740919885326
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.17%
+ 1: 49.83%
+
+Output Analysis: random()
+Typical Timing: 36 ± 1 ns
+Statistics of 1000 samples:
+ Minimum: 0.0005611174645538731
+ Median: (0.5035689629010788, 0.5043732233487602)
+ Maximum: 0.9997053348692302
+ Mean: 0.5062137836044255
+ Std Deviation: 0.2872867534109569
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.19%
+ 1: 49.81%
+
+Base Case
+Output Analysis: Random.uniform(0.0, 10.0)
+Typical Timing: 239 ± 21 ns
+Statistics of 1000 samples:
+ Minimum: 0.00855387357446502
+ Median: (4.8377420821319275, 4.839112429261609)
+ Maximum: 9.944528377056002
+ Mean: 4.985114491741573
+ Std Deviation: 2.854828406573762
+Post-processor distribution of 10000 samples using floor method:
+ 0: 9.97%
+ 1: 9.86%
+ 2: 9.47%
+ 3: 9.99%
+ 4: 10.33%
+ 5: 9.99%
+ 6: 9.88%
+ 7: 10.45%
+ 8: 10.33%
+ 9: 9.73%
+
+Output Analysis: uniform(0.0, 10.0)
+Typical Timing: 40 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.014370725680160675
+ Median: (4.932233828685737, 4.934800131365183)
+ Maximum: 9.991743209602872
+ Mean: 4.944711192504797
+ Std Deviation: 2.903933069340305
+Post-processor distribution of 10000 samples using floor method:
+ 0: 9.97%
+ 1: 9.87%
+ 2: 10.1%
+ 3: 9.71%
+ 4: 10.15%
+ 5: 10.05%
+ 6: 9.36%
+ 7: 10.35%
+ 8: 10.29%
+ 9: 10.15%
+
+Base Case
+Output Analysis: Random.expovariate(1.0)
+Typical Timing: 344 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0.00013930738155526723
+ Median: (0.6974151830509201, 0.6982605474669916)
+ Maximum: 7.006299712833918
+ Mean: 0.9851091283909009
+ Std Deviation: 0.9482631726906081
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.02%
+ 1: 23.19%
+ 2: 8.99%
+ 3: 3.01%
+ 4: 1.15%
+ 5: 0.38%
+ 6: 0.16%
+ 7: 0.04%
+ 8: 0.04%
+ 10: 0.01%
+ 13: 0.01%
+
+Output Analysis: expovariate(1.0)
+Typical Timing: 55 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 0.0005268217098112992
+ Median: (0.7287325498157464, 0.729028105461747)
+ Maximum: 6.423738021042586
+ Mean: 1.010884902851076
+ Std Deviation: 0.9798177662432959
+Post-processor distribution of 10000 samples using floor method:
+ 0: 62.92%
+ 1: 23.47%
+ 2: 8.41%
+ 3: 3.2%
+ 4: 1.3%
+ 5: 0.35%
+ 6: 0.27%
+ 7: 0.05%
+ 8: 0.03%
+
+Base Case
+Output Analysis: Random.gammavariate(2.0, 1.0)
+Typical Timing: 1216 ± 39 ns
+Statistics of 1000 samples:
+ Minimum: 0.022123265128863975
+ Median: (1.6738025588508376, 1.6869422953529067)
+ Maximum: 9.144862623568999
+ Mean: 1.9946207548427557
+ Std Deviation: 1.3831794343166977
+Post-processor distribution of 10000 samples using round method:
+ 0: 9.04%
+ 1: 34.77%
+ 2: 27.07%
+ 3: 15.54%
+ 4: 7.6%
+ 5: 3.25%
+ 6: 1.53%
+ 7: 0.75%
+ 8: 0.21%
+ 9: 0.13%
+ 10: 0.06%
+ 11: 0.01%
+ 12: 0.02%
+ 13: 0.01%
+ 14: 0.01%
+
+Output Analysis: gammavariate(2.0, 1.0)
+Typical Timing: 114 ± 5 ns
+Statistics of 1000 samples:
+ Minimum: 0.05050761827178252
+ Median: (1.7155254242728513, 1.7155403374497076)
+ Maximum: 9.474394865820214
+ Mean: 2.0432583626258274
+ Std Deviation: 1.440053170380605
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.35%
+ 1: 36.19%
+ 2: 26.63%
+ 3: 15.04%
+ 4: 7.56%
+ 5: 3.61%
+ 6: 1.59%
+ 7: 0.58%
+ 8: 0.33%
+ 9: 0.06%
+ 10: 0.03%
+ 11: 0.03%
+
+Base Case
+Output Analysis: Random.weibullvariate(1.0, 1.0)
+Typical Timing: 433 ± 31 ns
+Statistics of 1000 samples:
+ Minimum: 0.0013211102177539506
+ Median: (0.689421374168411, 0.6902805115868248)
+ Maximum: 6.763716954010422
+ Mean: 1.0145977021774952
+ Std Deviation: 1.0058606176825422
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.62%
+ 1: 22.96%
+ 2: 8.29%
+ 3: 3.2%
+ 4: 1.32%
+ 5: 0.36%
+ 6: 0.18%
+ 7: 0.04%
+ 8: 0.01%
+ 10: 0.02%
+
+Output Analysis: weibullvariate(1.0, 1.0)
+Typical Timing: 103 ± 15 ns
+Statistics of 1000 samples:
+ Minimum: 0.00143486573238355
+ Median: (0.6919630243174832, 0.6933880404695633)
+ Maximum: 7.915315904014041
+ Mean: 0.9999870976051519
+ Std Deviation: 1.0199621642753662
+Post-processor distribution of 10000 samples using floor method:
+ 0: 63.82%
+ 1: 22.46%
+ 2: 8.53%
+ 3: 3.25%
+ 4: 1.21%
+ 5: 0.47%
+ 6: 0.18%
+ 7: 0.06%
+ 8: 0.01%
+ 9: 0.01%
+
+Base Case
+Output Analysis: Random.betavariate(3.0, 3.0)
+Typical Timing: 2558 ± 78 ns
+Statistics of 1000 samples:
+ Minimum: 0.039839528361731796
+ Median: (0.5015726481908723, 0.5029699817553287)
+ Maximum: 0.9435702178836589
+ Mean: 0.5000214739643288
+ Std Deviation: 0.18805632108618242
+Post-processor distribution of 10000 samples using round method:
+ 0: 49.34%
+ 1: 50.66%
+
+Output Analysis: betavariate(3.0, 3.0)
+Typical Timing: 199 ± 16 ns
+Statistics of 1000 samples:
+ Minimum: 0.014386257468019166
+ Median: (0.5041917967703041, 0.5043820043201677)
+ Maximum: 0.9224068506980523
+ Mean: 0.5036287644629798
+ Std Deviation: 0.19311990407311008
+Post-processor distribution of 10000 samples using round method:
+ 0: 50.03%
+ 1: 49.97%
+
+Base Case
+Output Analysis: Random.paretovariate(4.0)
+Typical Timing: 299 ± 22 ns
+Statistics of 1000 samples:
+ Minimum: 1.0003778533014105
+ Median: (1.165002857930227, 1.165698705069618)
+ Maximum: 10.516678707241427
+ Mean: 1.3111050026121693
+ Std Deviation: 0.5187788907898297
+Post-processor distribution of 10000 samples using floor method:
+ 1: 93.54%
+ 2: 5.2%
+ 3: 0.93%
+ 4: 0.19%
+ 5: 0.03%
+ 6: 0.04%
+ 7: 0.04%
+ 10: 0.01%
+ 11: 0.01%
+ 12: 0.01%
+
+Output Analysis: paretovariate(4.0)
+Typical Timing: 79 ± 6 ns
+Statistics of 1000 samples:
+ Minimum: 1.0000021203352474
+ Median: (1.1950046733402977, 1.1960253759614277)
+ Maximum: 4.928427639622488
+ Mean: 1.3384992333095633
+ Std Deviation: 0.44348583284188964
+Post-processor distribution of 10000 samples using floor method:
+ 1: 93.57%
+ 2: 5.14%
+ 3: 0.83%
+ 4: 0.32%
+ 5: 0.08%
+ 6: 0.03%
+ 7: 0.01%
+ 8: 0.01%
+ 9: 0.01%
+
+Base Case
+Output Analysis: Random.gauss(1.0, 1.0)
+Typical Timing: 597 ± 27 ns
+Statistics of 1000 samples:
+ Minimum: -1.9198822626936378
+ Median: (1.005335898102709, 1.011229972843203)
+ Maximum: 3.995102828970162
+ Mean: 1.0036902758611341
+ Std Deviation: 1.0049002779744916
+Post-processor distribution of 10000 samples using round method:
+ -3: 0.01%
+ -2: 0.7%
+ -1: 6.54%
+ 0: 24.32%
+ 1: 37.67%
+ 2: 24.28%
+ 3: 5.86%
+ 4: 0.57%
+ 5: 0.05%
+
+Output Analysis: gauss(1.0, 1.0)
+Typical Timing: 84 ± 2 ns
+Statistics of 1000 samples:
+ Minimum: -2.105377657621053
+ Median: (0.9677613928765401, 0.9738364825460277)
+ Maximum: 3.9619897840596185
+ Mean: 0.9803515870690724
+ Std Deviation: 0.9847928983953689
+Post-processor distribution of 10000 samples using round method:
+ -3: 0.03%
+ -2: 0.58%
+ -1: 6.02%
+ 0: 24.3%
+ 1: 38.52%
+ 2: 23.92%
+ 3: 5.93%
+ 4: 0.67%
+ 5: 0.03%
+
+Base Case
+Output Analysis: Random.normalvariate(0.0, 2.8)
+Typical Timing: 686 ± 22 ns
+Statistics of 1000 samples:
+ Minimum: -9.36705533019951
+ Median: (-0.08343328178059332, -0.07242218755420544)
+ Maximum: 9.638137159093363
+ Mean: 0.015326886488786868
+ Std Deviation: 2.896301190156864
+Post-processor distribution of 10000 samples using round method:
+ -10: 0.03%
+ -9: 0.12%
+ -8: 0.24%
+ -7: 0.71%
+ -6: 1.38%
+ -5: 3.12%
+ -4: 4.93%
+ -3: 8.03%
+ -2: 11.44%
+ -1: 13.25%
+ 0: 14.37%
+ 1: 13.02%
+ 2: 10.66%
+ 3: 8.17%
+ 4: 5.2%
+ 5: 3.02%
+ 6: 1.29%
+ 7: 0.69%
+ 8: 0.22%
+ 9: 0.07%
+ 10: 0.04%
+
+Output Analysis: normalvariate(0.0, 2.8)
+Typical Timing: 84 ± 2 ns
+Statistics of 1000 samples:
+ Minimum: -9.046455801727028
+ Median: (0.004054759430993154, 0.021315402592363517)
+ Maximum: 9.578970261780695
+ Mean: -0.014712782228340401
+ Std Deviation: 2.760000323856411
+Post-processor distribution of 10000 samples using round method:
+ -11: 0.01%
+ -10: 0.04%
+ -9: 0.05%
+ -8: 0.16%
+ -7: 0.69%
+ -6: 1.61%
+ -5: 3.04%
+ -4: 5.24%
+ -3: 7.95%
+ -2: 10.99%
+ -1: 13.18%
+ 0: 14.69%
+ 1: 13.53%
+ 2: 11.0%
+ 3: 7.66%
+ 4: 4.95%
+ 5: 2.59%
+ 6: 1.46%
+ 7: 0.73%
+ 8: 0.3%
+ 9: 0.09%
+ 10: 0.02%
+ 11: 0.01%
+ 13: 0.01%
+
+Base Case
+Output Analysis: Random.lognormvariate(0.0, 0.5)
+Typical Timing: 878 ± 53 ns
+Statistics of 1000 samples:
+ Minimum: 0.2248693655862111
+ Median: (1.0456443550688597, 1.0463295395067145)
+ Maximum: 5.681692998787057
+ Mean: 1.1774875785497383
+ Std Deviation: 0.6355607662063447
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.24%
+ 1: 71.03%
+ 2: 17.45%
+ 3: 2.71%
+ 4: 0.43%
+ 5: 0.11%
+ 6: 0.02%
+ 9: 0.01%
+
+Output Analysis: lognormvariate(0.0, 0.5)
+Typical Timing: 109 ± 9 ns
+Statistics of 1000 samples:
+ Minimum: 0.21215863870079615
+ Median: (0.9708663230257852, 0.971472722331232)
+ Maximum: 4.11173040529319
+ Mean: 1.0903966237459795
+ Std Deviation: 0.5587946576471575
+Post-processor distribution of 10000 samples using round method:
+ 0: 8.65%
+ 1: 70.43%
+ 2: 17.45%
+ 3: 2.91%
+ 4: 0.48%
+ 5: 0.05%
+ 6: 0.03%
+
+Base Case
+Output Analysis: Random.vonmisesvariate(0, 0)
+Typical Timing: 270 ± 21 ns
+Statistics of 1000 samples:
+ Minimum: 0.004918010643852079
+ Median: (3.212229751626989, 3.2201766390537983)
+ Maximum: 6.257997091009342
+ Mean: 3.140987802653663
+ Std Deviation: 1.7890683319823657
+Post-processor distribution of 10000 samples using floor method:
+ 0: 16.05%
+ 1: 16.0%
+ 2: 15.44%
+ 3: 16.56%
+ 4: 15.69%
+ 5: 15.67%
+ 6: 4.59%
+
+Output Analysis: vonmisesvariate(0, 0)
+Typical Timing: 70 ± 9 ns
+Statistics of 1000 samples:
+ Minimum: 0.00460539766627348
+ Median: (3.084578088420162, 3.0866691165283298)
+ Maximum: 6.278298447163166
+ Mean: 3.115976931902511
+ Std Deviation: 1.7888917760687573
+Post-processor distribution of 10000 samples using floor method:
+ 0: 15.94%
+ 1: 15.94%
+ 2: 15.94%
+ 3: 15.77%
+ 4: 15.78%
+ 5: 15.93%
+ 6: 4.7%
+
+Base Case
+Output Analysis: Random.triangular(0.0, 10.0, 0.0)
+Typical Timing: 495 ± 19 ns
+Statistics of 1000 samples:
+ Minimum: 0.003237961622717833
+ Median: (2.756018739981477, 2.77041555411836)
+ Maximum: 9.679493886664185
+ Mean: 3.217204114204818
+ Std Deviation: 2.2695608348990586
+Post-processor distribution of 10000 samples using floor method:
+ 0: 19.81%
+ 1: 16.45%
+ 2: 15.12%
+ 3: 12.91%
+ 4: 11.14%
+ 5: 8.9%
+ 6: 6.77%
+ 7: 4.82%
+ 8: 3.08%
+ 9: 1.0%
+
+Output Analysis: triangular(0.0, 10.0, 0.0)
+Typical Timing: 43 ± 1 ns
+Statistics of 1000 samples:
+ Minimum: 0.0003452204741609677
+ Median: (3.050051144263745, 3.0566898002269616)
+ Maximum: 9.787833018174565
+ Mean: 3.335322504335237
+ Std Deviation: 2.303377888450858
+Post-processor distribution of 10000 samples using floor method:
+ 0: 18.17%
+ 1: 16.9%
+ 2: 15.42%
+ 3: 12.71%
+ 4: 11.34%
+ 5: 9.08%
+ 6: 7.48%
+ 7: 4.89%
+ 8: 3.02%
+ 9: 0.99%
+
+Base Case
+Output Analysis: Random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+Typical Timing: 789 ± 39 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.604
+ Std Deviation: 2.8201390036663083
+Distribution of 10000 samples:
+ 0: 10.18%
+ 1: 9.69%
+ 2: 9.88%
+ 3: 9.94%
+ 4: 10.21%
+ 5: 9.87%
+ 6: 9.82%
+ 7: 10.29%
+ 8: 9.56%
+ 9: 10.56%
+
+Output Analysis: choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+Typical Timing: 75 ± 10 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.531
+ Std Deviation: 2.9125657074133113
+Distribution of 10000 samples:
+ 0: 9.55%
+ 1: 10.29%
+ 2: 9.91%
+ 3: 9.94%
+ 4: 10.03%
+ 5: 10.1%
+ 6: 10.73%
+ 7: 10.19%
+ 8: 10.0%
+ 9: 9.26%
+
+Base Case
+Output Analysis: Random.choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], k=1)
+Typical Timing: 2374 ± 70 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 2.944
+ Std Deviation: 2.4076677511650146
+Distribution of 10000 samples:
+ 0: 17.9%
+ 1: 16.81%
+ 2: 14.91%
+ 3: 12.4%
+ 4: 10.98%
+ 5: 8.8%
+ 6: 7.55%
+ 7: 5.4%
+ 8: 3.54%
+ 9: 1.71%
+
+Output Analysis: choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], k=1)
+Typical Timing: 1147 ± 56 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 3.016
+ Std Deviation: 2.4754280437936385
+Distribution of 10000 samples:
+ 0: 18.44%
+ 1: 16.19%
+ 2: 14.63%
+ 3: 12.99%
+ 4: 10.77%
+ 5: 8.88%
+ 6: 7.59%
+ 7: 5.21%
+ 8: 3.57%
+ 9: 1.73%
+
+Base Case
+Output Analysis: Random.choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], cum_weights=[10, 19, 27, 34, 40, 45, 49, 52, 54, 55], k=1)
+Typical Timing: 1782 ± 52 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 2
+ Maximum: 9
+ Mean: 2.886
+ Std Deviation: 2.4594723011247757
+Distribution of 10000 samples:
+ 0: 17.65%
+ 1: 16.66%
+ 2: 14.8%
+ 3: 12.17%
+ 4: 11.21%
+ 5: 9.01%
+ 6: 7.36%
+ 7: 5.67%
+ 8: 3.66%
+ 9: 1.81%
+
+Output Analysis: choices([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], cum_weights=[10, 19, 27, 34, 40, 45, 49, 52, 54, 55], k=1)
+Typical Timing: 702 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 3
+ Maximum: 9
+ Mean: 3.054
+ Std Deviation: 2.409374192606869
+Distribution of 10000 samples:
+ 0: 17.91%
+ 1: 15.49%
+ 2: 14.94%
+ 3: 12.73%
+ 4: 10.98%
+ 5: 9.59%
+ 6: 7.51%
+ 7: 5.46%
+ 8: 3.54%
+ 9: 1.85%
+
+Base Case
+Timer only: random.shuffle(some_list) of size 10:
+Typical Timing: 8322 ± 1705 ns
+
+Timer only: shuffle(some_list) of size 10:
+Typical Timing: 794 ± 317 ns
+
+Base Case
+Output Analysis: Random.sample([5, 7, 8, 2, 6, 3, 4, 9, 1, 0], k=3)
+Typical Timing: 4137 ± 161 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 4
+ Maximum: 9
+ Mean: 4.485
+ Std Deviation: 2.9294666750109997
+Distribution of 10000 samples:
+ 0: 10.03%
+ 1: 10.19%
+ 2: 9.98%
+ 3: 10.05%
+ 4: 9.92%
+ 5: 9.44%
+ 6: 10.59%
+ 7: 9.77%
+ 8: 10.26%
+ 9: 9.77%
+
+Output Analysis: sample([5, 7, 8, 2, 6, 3, 4, 9, 1, 0], k=3)
+Typical Timing: 848 ± 20 ns
+Statistics of 1000 samples:
+ Minimum: 0
+ Median: 5
+ Maximum: 9
+ Mean: 4.568
+ Std Deviation: 2.8631060057217583
+Distribution of 10000 samples:
+ 0: 9.8%
+ 1: 10.03%
+ 2: 10.4%
+ 3: 9.73%
+ 4: 10.17%
+ 5: 10.1%
+ 6: 9.76%
+ 7: 10.08%
+ 8: 10.13%
+ 9: 9.8%
+
+
+Total Test Time: 1.986 sec
+```
+
+
+
+
+%prep
+%autosetup -n Pyewacket-1.3.9
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-Pyewacket -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3.9-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..6358a8b
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+bcc944d86ad2d20d336e41be8afbe2fd Pyewacket-1.3.9.tar.gz