random values generator
Project description
🎲 rvg 🎲 - Random Values Generator
Description
rvg is a Python 3 package utility to create random values of any Python 3 data type.
Its main purpose is to help in applications where reliable -in terms of type safety- random values are needed (e.g. statistics, machine learning, general testing etc), and in specific layouts (e.g. "I want a numpy structured array of random pairs of ints and floats and I want it now").
Authors
Sotiris Niarchos and George Papadopoulos
Installation
You can either:
- download the source code from the releases page or clone the repo (the
masterbranch will always mirror the latest release) - use
pip:
pip install rvg
Current Status
Alpha release
For the time being, only numpy types are supported. More specifically:
numpyscalar data typesnumpyarrays of scalar data typesnumpyarrays of structured data types
After the alpha release, more features will be implemented, focusing mainly on Python 3 native types.
Usage
Right now, rvg provides 2 interafaces for random values generation through the NumPyRVG class:
- Create a generator of a certain data type
- Create a generator with specific numerical limits A demonstration follows:
from rvg import NumPyRVG
import numpy as np
# Interface 1
randuint = NumPyRVG(dtype=np.uint16)
# Interface 2
randsmall = NumPyRVG(limit=10) # same as limits=(-10, 10)
randbig = NumPyRVG(limits=(1e10, 1e100))
The functionalities of NumPyRVG include the generation of:
numpyscalar data types:
>>> randsmall(np.uint8)
8
>>> randbig(np.double)
1.9296971162995923e+99
>>> res = [randsmall(t) for t in [np.int8, np.uint16, np.float32, np.double]]
>>> res
[7, 1, 3.0503626, 3.759943941132951]
>>> list(map(type, res))
[<class 'numpy.int8'>, <class 'numpy.uint16'>, <class 'numpy.float32'>, <class 'numpy.float64'>]
numpyarray data types from scalar types:
>>> randuint((50, 100), shape=3)
array([79, 81, 85], dtype=uint16)
>>> randsmall(np.float16, shape=(4, 2))
array([[-7.23 , -9.31 ],
[-4.97 , -6.06 ],
[-5.19 , -3.344],
[-6.586, -3.133]], dtype=float16)
numpystructured array data types (structured datatypes can be nested). Limits and shapes can be given in the form of a dictionary, describing all limits and/or shapes of each field of each level of the structured data type. An example follows:
# Consider the struct definition below, in C:
##############################################
# typedef struct knode {
# int location;
# int indices [3];
# int keys [3];
# bool is_leaf;
# int num_keys;
# } knode;
##############################################
import numpy as np
from rvg import NumPyRVG
knode = np.dtype([
('location', int),
('indices', (int, 3)),
('keys', (int, 3)),
('is_leaf', int),
('num_keys', int)
])
knode_params = {
'location' : (0, 10),
'indices' : 42,
'keys' : 117,
'is_leaf' : (0, 2),
'num_keys' : (0, 256)
}
random_knode = NumPyRVG(dtype=knode)
knodes_array = random_knode(knode_params, 5)
print(knodes_array)
The output of the above script is a nested structured numpy array consisting of 5 knode structs, randomly initialized!
[(0, [-18, -11, 34], [ 89, 35, -57], 1, 189)
(6, [-35, 0, 4], [ -56, -65, 26], 1, 217)
(4, [-29, 40, 37], [ 93, -116, 91], 0, 38)
(2, [-28, -42, -36], [-101, 0, -43], 0, 82)
(0, [-14, -19, -13], [ -98, -46, -78], 1, 238)]
If the script was run in an interpreter, you could inspect its type as well:
>>> knodes_array
array([(0, [-18, -11, 34], [ 89, 35, -57], 1, 189),
(6, [-35, 0, 4], [ -56, -65, 26], 1, 217),
(4, [-29, 40, 37], [ 93, -116, 91], 0, 38),
(2, [-28, -42, -36], [-101, 0, -43], 0, 82),
(0, [-14, -19, -13], [ -98, -46, -78], 1, 238)],
dtype=[('location', '<i8'), ('indices', '<i8', (3,)), ('keys', '<i8', (3,)), ('is_leaf', '<i8'), ('num_keys', '<i8')])
The feature of nesting is not limited in arrays; you can create data types that are as complex as you want and/or need! See the relative test as an example of struct nesting.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rvg-0.1.8.tar.gz.
File metadata
- Download URL: rvg-0.1.8.tar.gz
- Upload date:
- Size: 4.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
796205d9e5ccf858f102d29d11618c1b204733e56ca72ea8cf55d8ba55c1a93b
|
|
| MD5 |
dca0caf42f9b75221e0285df69967794
|
|
| BLAKE2b-256 |
aebec3300cfae2e2b2d7a62a5b598072be85bef08e4be4e79fc422bbf14b9b93
|
File details
Details for the file rvg-0.1.8-py3-none-any.whl.
File metadata
- Download URL: rvg-0.1.8-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.8.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff8dc57f6daa780e791f7dae6f5dd6e9c2f3c883a1842b05e1cfcebcf32564b4
|
|
| MD5 |
ea5c60fc403a10ee7780bed07c886f31
|
|
| BLAKE2b-256 |
eee791b9328b13b5177779b6a267c7b9282f249046a543704ed529005c8dcb06
|