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
|
# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
# For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
# Copyright (c) https://github.com/PyCQA/astroid/blob/main/CONTRIBUTORS.txt
import unittest
try:
import numpy # pylint: disable=unused-import
HAS_NUMPY = True
except ImportError:
HAS_NUMPY = False
from astroid import builder, nodes
@unittest.skipUnless(HAS_NUMPY, "This test requires the numpy library.")
class NumpyBrainRandomMtrandTest(unittest.TestCase):
"""Test of all the functions of numpy.random.mtrand module."""
# Map between functions names and arguments names and default values
all_mtrand = {
"beta": (["a", "b", "size"], [None]),
"binomial": (["n", "p", "size"], [None]),
"bytes": (["length"], []),
"chisquare": (["df", "size"], [None]),
"choice": (["a", "size", "replace", "p"], [None, True, None]),
"dirichlet": (["alpha", "size"], [None]),
"exponential": (["scale", "size"], [1.0, None]),
"f": (["dfnum", "dfden", "size"], [None]),
"gamma": (["shape", "scale", "size"], [1.0, None]),
"geometric": (["p", "size"], [None]),
"get_state": ([], []),
"gumbel": (["loc", "scale", "size"], [0.0, 1.0, None]),
"hypergeometric": (["ngood", "nbad", "nsample", "size"], [None]),
"laplace": (["loc", "scale", "size"], [0.0, 1.0, None]),
"logistic": (["loc", "scale", "size"], [0.0, 1.0, None]),
"lognormal": (["mean", "sigma", "size"], [0.0, 1.0, None]),
"logseries": (["p", "size"], [None]),
"multinomial": (["n", "pvals", "size"], [None]),
"multivariate_normal": (["mean", "cov", "size"], [None]),
"negative_binomial": (["n", "p", "size"], [None]),
"noncentral_chisquare": (["df", "nonc", "size"], [None]),
"noncentral_f": (["dfnum", "dfden", "nonc", "size"], [None]),
"normal": (["loc", "scale", "size"], [0.0, 1.0, None]),
"pareto": (["a", "size"], [None]),
"permutation": (["x"], []),
"poisson": (["lam", "size"], [1.0, None]),
"power": (["a", "size"], [None]),
"rand": (["args"], []),
"randint": (["low", "high", "size", "dtype"], [None, None, "l"]),
"randn": (["args"], []),
"random": (["size"], [None]),
"random_integers": (["low", "high", "size"], [None, None]),
"random_sample": (["size"], [None]),
"rayleigh": (["scale", "size"], [1.0, None]),
"seed": (["seed"], [None]),
"set_state": (["state"], []),
"shuffle": (["x"], []),
"standard_cauchy": (["size"], [None]),
"standard_exponential": (["size"], [None]),
"standard_gamma": (["shape", "size"], [None]),
"standard_normal": (["size"], [None]),
"standard_t": (["df", "size"], [None]),
"triangular": (["left", "mode", "right", "size"], [None]),
"uniform": (["low", "high", "size"], [0.0, 1.0, None]),
"vonmises": (["mu", "kappa", "size"], [None]),
"wald": (["mean", "scale", "size"], [None]),
"weibull": (["a", "size"], [None]),
"zipf": (["a", "size"], [None]),
}
def _inferred_numpy_attribute(self, func_name):
node = builder.extract_node(
f"""
import numpy.random.mtrand as tested_module
func = tested_module.{func_name:s}
func"""
)
return next(node.infer())
def test_numpy_random_mtrand_functions(self):
"""Test that all functions have FunctionDef type."""
for func in self.all_mtrand:
with self.subTest(func=func):
inferred = self._inferred_numpy_attribute(func)
self.assertIsInstance(inferred, nodes.FunctionDef)
def test_numpy_random_mtrand_functions_signature(self):
"""Test the arguments names and default values."""
for (
func,
(exact_arg_names, exact_kwargs_default_values),
) in self.all_mtrand.items():
with self.subTest(func=func):
inferred = self._inferred_numpy_attribute(func)
self.assertEqual(inferred.argnames(), exact_arg_names)
default_args_values = [
default.value for default in inferred.args.defaults
]
self.assertEqual(default_args_values, exact_kwargs_default_values)
if __name__ == "__main__":
unittest.main()
|