1 /*[clinic input]
2 preserve
3 [clinic start generated code]*/
4
5 #include "pycore_critical_section.h"// Py_BEGIN_CRITICAL_SECTION()
6 #include "pycore_modsupport.h" // _PyArg_CheckPositional()
7
8 PyDoc_STRVAR(_random_Random_random__doc__,
9 "random($self, /)\n"
10 "--\n"
11 "\n"
12 "random() -> x in the interval [0, 1).");
13
14 #define _RANDOM_RANDOM_RANDOM_METHODDEF \
15 {"random", (PyCFunction)_random_Random_random, METH_NOARGS, _random_Random_random__doc__},
16
17 static PyObject *
18 _random_Random_random_impl(RandomObject *self);
19
20 static PyObject *
_random_Random_random(RandomObject * self,PyObject * Py_UNUSED (ignored))21 _random_Random_random(RandomObject *self, PyObject *Py_UNUSED(ignored))
22 {
23 PyObject *return_value = NULL;
24
25 Py_BEGIN_CRITICAL_SECTION(self);
26 return_value = _random_Random_random_impl(self);
27 Py_END_CRITICAL_SECTION();
28
29 return return_value;
30 }
31
32 PyDoc_STRVAR(_random_Random_seed__doc__,
33 "seed($self, n=None, /)\n"
34 "--\n"
35 "\n"
36 "seed([n]) -> None.\n"
37 "\n"
38 "Defaults to use urandom and falls back to a combination\n"
39 "of the current time and the process identifier.");
40
41 #define _RANDOM_RANDOM_SEED_METHODDEF \
42 {"seed", _PyCFunction_CAST(_random_Random_seed), METH_FASTCALL, _random_Random_seed__doc__},
43
44 static PyObject *
45 _random_Random_seed_impl(RandomObject *self, PyObject *n);
46
47 static PyObject *
_random_Random_seed(RandomObject * self,PyObject * const * args,Py_ssize_t nargs)48 _random_Random_seed(RandomObject *self, PyObject *const *args, Py_ssize_t nargs)
49 {
50 PyObject *return_value = NULL;
51 PyObject *n = Py_None;
52
53 if (!_PyArg_CheckPositional("seed", nargs, 0, 1)) {
54 goto exit;
55 }
56 if (nargs < 1) {
57 goto skip_optional;
58 }
59 n = args[0];
60 skip_optional:
61 Py_BEGIN_CRITICAL_SECTION(self);
62 return_value = _random_Random_seed_impl(self, n);
63 Py_END_CRITICAL_SECTION();
64
65 exit:
66 return return_value;
67 }
68
69 PyDoc_STRVAR(_random_Random_getstate__doc__,
70 "getstate($self, /)\n"
71 "--\n"
72 "\n"
73 "getstate() -> tuple containing the current state.");
74
75 #define _RANDOM_RANDOM_GETSTATE_METHODDEF \
76 {"getstate", (PyCFunction)_random_Random_getstate, METH_NOARGS, _random_Random_getstate__doc__},
77
78 static PyObject *
79 _random_Random_getstate_impl(RandomObject *self);
80
81 static PyObject *
_random_Random_getstate(RandomObject * self,PyObject * Py_UNUSED (ignored))82 _random_Random_getstate(RandomObject *self, PyObject *Py_UNUSED(ignored))
83 {
84 PyObject *return_value = NULL;
85
86 Py_BEGIN_CRITICAL_SECTION(self);
87 return_value = _random_Random_getstate_impl(self);
88 Py_END_CRITICAL_SECTION();
89
90 return return_value;
91 }
92
93 PyDoc_STRVAR(_random_Random_setstate__doc__,
94 "setstate($self, state, /)\n"
95 "--\n"
96 "\n"
97 "setstate(state) -> None. Restores generator state.");
98
99 #define _RANDOM_RANDOM_SETSTATE_METHODDEF \
100 {"setstate", (PyCFunction)_random_Random_setstate, METH_O, _random_Random_setstate__doc__},
101
102 static PyObject *
103 _random_Random_setstate_impl(RandomObject *self, PyObject *state);
104
105 static PyObject *
_random_Random_setstate(RandomObject * self,PyObject * state)106 _random_Random_setstate(RandomObject *self, PyObject *state)
107 {
108 PyObject *return_value = NULL;
109
110 Py_BEGIN_CRITICAL_SECTION(self);
111 return_value = _random_Random_setstate_impl(self, state);
112 Py_END_CRITICAL_SECTION();
113
114 return return_value;
115 }
116
117 PyDoc_STRVAR(_random_Random_getrandbits__doc__,
118 "getrandbits($self, k, /)\n"
119 "--\n"
120 "\n"
121 "getrandbits(k) -> x. Generates an int with k random bits.");
122
123 #define _RANDOM_RANDOM_GETRANDBITS_METHODDEF \
124 {"getrandbits", (PyCFunction)_random_Random_getrandbits, METH_O, _random_Random_getrandbits__doc__},
125
126 static PyObject *
127 _random_Random_getrandbits_impl(RandomObject *self, int k);
128
129 static PyObject *
_random_Random_getrandbits(RandomObject * self,PyObject * arg)130 _random_Random_getrandbits(RandomObject *self, PyObject *arg)
131 {
132 PyObject *return_value = NULL;
133 int k;
134
135 k = PyLong_AsInt(arg);
136 if (k == -1 && PyErr_Occurred()) {
137 goto exit;
138 }
139 Py_BEGIN_CRITICAL_SECTION(self);
140 return_value = _random_Random_getrandbits_impl(self, k);
141 Py_END_CRITICAL_SECTION();
142
143 exit:
144 return return_value;
145 }
146 /*[clinic end generated code: output=bf49ece1d341b1b6 input=a9049054013a1b77]*/
147