ai-content-maker/.venv/Lib/site-packages/numba/tests/test_help.py

93 lines
3.4 KiB
Python

import sys
import subprocess
import types as pytypes
import os.path
import numpy as np
import builtins
from numba.core import types
from numba.tests.support import TestCase, temp_directory
from numba.misc.help.inspector import inspect_function, inspect_module
class TestInspector(TestCase):
def check_function_descriptor(self, info, must_be_defined=False):
self.assertIsInstance(info, dict)
self.assertIn('numba_type', info)
numba_type = info['numba_type']
if numba_type is None:
self.assertFalse(must_be_defined)
else:
self.assertIsInstance(numba_type, types.Type)
self.assertIn('explained', info)
self.assertIsInstance(info['explained'], str)
self.assertIn('source_infos', info)
self.assertIsInstance(info['source_infos'], dict)
def test_inspect_function_on_range(self):
info = inspect_function(range)
self.check_function_descriptor(info, must_be_defined=True)
def test_inspect_function_on_np_all(self):
info = inspect_function(np.all)
self.check_function_descriptor(info, must_be_defined=True)
source_infos = info['source_infos']
self.assertGreater(len(source_infos), 0)
c = 0
for srcinfo in source_infos.values():
self.assertIsInstance(srcinfo['kind'], str)
self.assertIsInstance(srcinfo['name'], str)
self.assertIsInstance(srcinfo['sig'], str)
self.assertIsInstance(srcinfo['filename'], str)
self.assertIsInstance(srcinfo['lines'], tuple)
self.assertIn('docstring', srcinfo)
c += 1
self.assertEqual(c, len(source_infos))
def test_inspect_module(self):
c = 0
for it in inspect_module(builtins):
self.assertIsInstance(it['module'], pytypes.ModuleType)
self.assertIsInstance(it['name'], str)
self.assertTrue(callable(it['obj']))
self.check_function_descriptor(it)
c += 1
self.assertGreater(c, 0)
def test_inspect_cli(self):
# Try CLI on math module
cmdbase = [sys.executable, '-m', 'numba.misc.help.inspector']
dirpath = temp_directory('{}.{}'.format(__name__,
self.__class__.__name__))
filename = os.path.join(dirpath, 'out')
# Try default format "html"
expected_file = filename + '.html'
cmds = cmdbase + ['--file', filename, 'math']
# File shouldn't exist yet
self.assertFalse(os.path.isfile(expected_file))
# Run CLI
subprocess.check_output(cmds)
# File should exist now
self.assertTrue(os.path.isfile(expected_file))
# Try changing the format to "rst"
cmds = cmdbase + ['--file', filename, '--format', 'rst', 'math']
expected_file = filename + '.rst'
# File shouldn't exist yet
self.assertFalse(os.path.isfile(expected_file))
# Run CLI
subprocess.check_output(cmds)
# File should exist now
self.assertTrue(os.path.isfile(expected_file))
# Try unsupported format
cmds = cmdbase + ['--file', filename, '--format', 'foo', 'math']
# Run CLI
with self.assertRaises(subprocess.CalledProcessError) as raises:
subprocess.check_output(cmds, stderr=subprocess.STDOUT)
self.assertIn("\'foo\' is not supported",
raises.exception.stdout.decode())