astroid/tests/unittest_brain_numpy_random...

116 lines
4.7 KiB
Python

# Copyright (c) 2019-2021 hippo91 <guillaume.peillex@gmail.com>
# Copyright (c) 2019 Ashley Whetter <ashley@awhetter.co.uk>
# Copyright (c) 2020 Claudiu Popa <pcmanticore@gmail.com>
# Copyright (c) 2021 Pierre Sassoulas <pierre.sassoulas@gmail.com>
# Copyright (c) 2021 Marc Mueller <30130371+cdce8p@users.noreply.github.com>
# 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
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()