|
|
|
|
|
|
|
|
|
|
|
import random as py_random |
|
|
from typing import Any, Optional, Sequence, Type, Union |
|
|
|
|
|
import numpy as np |
|
|
|
|
|
from .core.transforms_interface import NumType |
|
|
|
|
|
IntNumType = Union[int, np.ndarray] |
|
|
Size = Union[int, Sequence[int]] |
|
|
|
|
|
|
|
|
def get_random_state() -> np.random.RandomState: |
|
|
return np.random.RandomState(py_random.randint(0, (1 << 32) - 1)) |
|
|
|
|
|
|
|
|
def uniform( |
|
|
low: NumType = 0.0, |
|
|
high: NumType = 1.0, |
|
|
size: Optional[Size] = None, |
|
|
random_state: Optional[np.random.RandomState] = None, |
|
|
) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.uniform(low, high, size) |
|
|
|
|
|
|
|
|
def rand(d0: NumType, d1: NumType, *more, random_state: Optional[np.random.RandomState] = None, **kwargs) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.rand(d0, d1, *more, **kwargs) |
|
|
|
|
|
|
|
|
def randn(d0: NumType, d1: NumType, *more, random_state: Optional[np.random.RandomState] = None, **kwargs) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.randn(d0, d1, *more, **kwargs) |
|
|
|
|
|
|
|
|
def normal( |
|
|
loc: NumType = 0.0, |
|
|
scale: NumType = 1.0, |
|
|
size: Optional[Size] = None, |
|
|
random_state: Optional[np.random.RandomState] = None, |
|
|
) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.normal(loc, scale, size) |
|
|
|
|
|
|
|
|
def poisson( |
|
|
lam: NumType = 1.0, size: Optional[Size] = None, random_state: Optional[np.random.RandomState] = None |
|
|
) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.poisson(lam, size) |
|
|
|
|
|
|
|
|
def permutation( |
|
|
x: Union[int, Sequence[float], np.ndarray], random_state: Optional[np.random.RandomState] = None |
|
|
) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.permutation(x) |
|
|
|
|
|
|
|
|
def randint( |
|
|
low: IntNumType, |
|
|
high: Optional[IntNumType] = None, |
|
|
size: Optional[Size] = None, |
|
|
dtype: Type = np.int32, |
|
|
random_state: Optional[np.random.RandomState] = None, |
|
|
) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.randint(low, high, size, dtype) |
|
|
|
|
|
|
|
|
def random(size: Optional[NumType] = None, random_state: Optional[np.random.RandomState] = None) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.random(size) |
|
|
|
|
|
|
|
|
def choice( |
|
|
a: NumType, |
|
|
size: Optional[Size] = None, |
|
|
replace: bool = True, |
|
|
p: Optional[Union[Sequence[float], np.ndarray]] = None, |
|
|
random_state: Optional[np.random.RandomState] = None, |
|
|
) -> Any: |
|
|
if random_state is None: |
|
|
random_state = get_random_state() |
|
|
return random_state.choice(a, size, replace, p) |
|
|
|