-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlib_random.py
More file actions
147 lines (122 loc) · 4.74 KB
/
lib_random.py
File metadata and controls
147 lines (122 loc) · 4.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# -*- coding: utf-8 -*-
from __future__ import division
TYPE_CHECKING = False
if TYPE_CHECKING:
from typing import Callable
import random
from .lib_object import BaseManager
class Random:
"""
Random 提供了随机数相关的内置函数
"""
_manager = BaseManager()
def __init__(self, manager): # type: (BaseManager) -> None
"""初始化并返回一个新的 Random
Args:
manager (BaseManager):
用于管理引用对象的对象管理器
"""
self._manager = manager
def rand(self): # type: () -> random.Random
"""
rand 返回用于生成随机数的随机数生成器。
它是对 self._manager.rand() 的简单包装
Returns:
random.Random:
用于生成随机数的随机数生成器
"""
return self._manager.rand()
def shuffle(self, ptr): # type: (int) -> bool
"""
shuffle shuffles the given list in place,
and always returns True.
Args:
ptr (int):
The pointer points to the list to be shuffled
Returns:
bool: Always returns True
"""
self.rand().shuffle(self._manager.deref(ptr))
return True
def seed(self, a=None): # type: (int | float | str | None) -> bool
"""
Initialize internal state from a seed.
The only supported seed types are None, int, float or str.
None or no argument seeds from current time or from
an operating system specific randomness source if available.
If *a* is an int, all bits are used.
Args:
a (int | float | str | None, optional):
The seed value.
Defaults to None.
Returns:
bool: Always returns True
"""
self.rand().seed(a)
return True
def setstate(self, ptr): # type: (int) -> bool
"""
setstate restores internal state
from object returned by getstate.
Args:
ptr (int):
The pointer points to the state object
Returns:
bool: Always returns True
"""
self.rand().setstate(self._manager.deref(ptr))
return True
def build_func(
self,
origin, # type: dict[str, Callable[..., int | bool | float | str]]
): # type: (...) -> None
"""
build_func 构建 random 模块的内置函数,
并将构建结果写入到传递的 origin 字典中
Args:
origin (dict[str, Callable[..., int | bool | float | str]]):
用于存放所有内置函数的字典
"""
funcs = {} # type: dict[str, Callable[..., int | bool | float | str]]
funcs["random.betavariate"] = lambda alpha, beta: self.rand().betavariate(
alpha, beta
)
funcs["random.choice"] = lambda ptr: self._manager.ref(
self.rand().choice(self._manager.deref(ptr))
)
funcs["random.expovariate"] = lambda lambd=1.0: self.rand().expovariate(lambd)
funcs["random.gammavariate"] = lambda alpha, beta: self.rand().gammavariate(
alpha, beta
)
funcs["random.gauss"] = lambda mu=0.0, sigma=1.0: self.rand().gauss(mu, sigma)
funcs["random.lognormvariate"] = lambda mu, sigma: self.rand().lognormvariate(
mu, sigma
)
funcs["random.normalvariate"] = (
lambda mu=0.0, sigma=1.0: self.rand().normalvariate(mu, sigma)
)
funcs["random.paretovariate"] = lambda alpha: self.rand().paretovariate(alpha)
funcs["random.randint"] = lambda a, b: self.rand().randint(a, b)
funcs["random.random"] = lambda: self.rand().random()
funcs["random.randrange"] = (
lambda start, stop=None, step=1: self.rand().randrange(start, stop, step)
)
funcs["random.sample"] = lambda population_ptr, k: self._manager.ref(
self.rand().sample(self._manager.deref(population_ptr), k)
)
funcs["random.shuffle"] = self.shuffle
funcs["random.triangular"] = (
lambda low=0.0, high=1.0, mode=None: self.rand().triangular(low, high, mode)
)
funcs["random.uniform"] = lambda a, b: self.rand().uniform(a, b)
funcs["random.vonmisesvariate"] = lambda mu, kappa: self.rand().vonmisesvariate(
mu, kappa
)
funcs["random.weibullvariate"] = lambda alpha, beta: self.rand().weibullvariate(
alpha, beta
)
funcs["random.seed"] = self.seed
funcs["random.getstate"] = lambda: self._manager.ref(self.rand().getstate())
funcs["random.setstate"] = self.setstate
for key, value in funcs.items():
origin[key] = value