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

190 lines
5.8 KiB
Python
Raw Normal View History

2024-05-03 04:18:51 +03:00
import platform
import unittest
from unittest import skipUnless
from unittest.mock import NonCallableMock
from itertools import chain
from datetime import datetime
from contextlib import redirect_stdout
from io import StringIO
from numba.tests.support import TestCase
import numba.misc.numba_sysinfo as nsi
class TestSysInfo(TestCase):
def setUp(self):
super(TestSysInfo, self).setUp()
self.info = nsi.get_sysinfo()
self.safe_contents = {
int: (
nsi._cpu_count,
),
float: (
nsi._runtime,
),
str: (
nsi._machine,
nsi._cpu_name,
nsi._platform_name,
nsi._os_name,
nsi._os_version,
nsi._python_comp,
nsi._python_impl,
nsi._python_version,
nsi._llvm_version,
nsi._numpy_version,
),
bool: (
nsi._cu_dev_init,
nsi._svml_state,
nsi._svml_loaded,
nsi._svml_operational,
nsi._llvm_svml_patched,
nsi._tbb_thread,
nsi._openmp_thread,
nsi._wkq_thread,
nsi._numpy_AVX512_SKX_detected,
),
list: (
nsi._errors,
nsi._warnings,
),
dict: (
nsi._numba_env_vars,
),
datetime: (
nsi._start,
nsi._start_utc,
),
}
self.safe_keys = chain(*self.safe_contents.values())
def tearDown(self):
super(TestSysInfo, self).tearDown()
# System info might contain long strings or lists so delete it.
del self.info
def test_has_safe_keys(self):
for k in self.safe_keys:
with self.subTest(k=k):
self.assertIn(k, self.info)
def test_safe_content_type(self):
for t, keys in self.safe_contents.items():
for k in keys:
with self.subTest(k=k):
self.assertIsInstance(self.info[k], t)
def test_has_no_error(self):
self.assertFalse(self.info[nsi._errors])
def test_display_empty_info(self):
output = StringIO()
with redirect_stdout(output):
res = nsi.display_sysinfo({})
self.assertIsNone(res)
output.close()
class TestSysInfoWithPsutil(TestCase):
mem_total = 2 * 1024 ** 2 # 2_097_152
mem_available = 1024 ** 2 # 1_048_576
cpus_list = [1, 2]
def setUp(self):
super(TestSysInfoWithPsutil, self).setUp()
self.psutil_orig_state = nsi._psutil_import
# Mocking psutil
nsi._psutil_import = True
nsi.psutil = NonCallableMock()
vm = nsi.psutil.virtual_memory.return_value
vm.total = self.mem_total
vm.available = self.mem_available
if platform.system() in ('Linux', 'Windows',):
# cpu_affiniy only available on Linux and Windows
proc = nsi.psutil.Process.return_value
proc.cpu_affinity.return_value = self.cpus_list
else:
nsi.psutil.Process.return_value = None
self.info = nsi.get_os_spec_info(platform.system())
def tearDown(self):
super(TestSysInfoWithPsutil, self).tearDown()
nsi._psutil_import = self.psutil_orig_state
def test_has_all_data(self):
keys = (nsi._mem_total, nsi._mem_available)
for k in keys:
with self.subTest(k=k):
self.assertIn(k, self.info.keys())
self.assertIsInstance(self.info[k], int)
def test_has_correct_values(self):
self.assertEqual(self.info[nsi._mem_total], self.mem_total)
self.assertEqual(self.info[nsi._mem_available], self.mem_available)
@skipUnless(platform.system() in ('Linux', 'Windows'),
"CPUs allowed info only available on Linux and Windows")
def test_cpus_list(self):
self.assertEqual(self.info[nsi._cpus_allowed], len(self.cpus_list))
self.assertEqual(self.info[nsi._cpus_list],
' '.join(str(n) for n in self.cpus_list))
class TestSysInfoWithoutPsutil(TestCase):
def setUp(self):
super(TestSysInfoWithoutPsutil, self).setUp()
self.psutil_orig_state = nsi._psutil_import
nsi._psutil_import = False
self.info = nsi.get_os_spec_info(platform.system())
def tearDown(self):
super(TestSysInfoWithoutPsutil, self).tearDown()
nsi._psutil_import = self.psutil_orig_state
def test_has_all_data(self):
keys = (nsi._mem_total, nsi._mem_available)
for k in keys:
with self.subTest(k=k):
self.assertIn(k, self.info.keys())
self.assertIsInstance(self.info[k], int)
class TestPlatformSpecificInfo(TestCase):
def setUp(self):
self.plat_spec_info = {
'Linux': {
str: (nsi._libc_version,),
},
'Windows': {
str: (nsi._os_spec_version,),
},
'Darwin': {
str: (nsi._os_spec_version,),
},
}
self.os_name = platform.system()
self.contents = self.plat_spec_info.get(self.os_name, {})
self.info = nsi.get_os_spec_info(self.os_name)
def test_has_all_data(self):
keys = chain(*self.contents.values())
for k in keys:
with self.subTest(k=k):
self.assertIn(k, self.info.keys())
def test_content_type(self):
for t, keys in self.contents.items():
for k in keys:
with self.subTest(k=k):
self.assertIsInstance(self.info[k], t)
if __name__ == '__main__':
unittest.main()