|
""" |
|
Utility methods to print system info for debugging |
|
|
|
adapted from :func:`pandas.show_versions` |
|
""" |
|
|
|
|
|
|
|
|
|
import platform |
|
import sys |
|
|
|
from threadpoolctl import threadpool_info |
|
|
|
from .. import __version__ |
|
from ._openmp_helpers import _openmp_parallelism_enabled |
|
|
|
|
|
def _get_sys_info(): |
|
"""System information |
|
|
|
Returns |
|
------- |
|
sys_info : dict |
|
system and Python version information |
|
|
|
""" |
|
python = sys.version.replace("\n", " ") |
|
|
|
blob = [ |
|
("python", python), |
|
("executable", sys.executable), |
|
("machine", platform.platform()), |
|
] |
|
|
|
return dict(blob) |
|
|
|
|
|
def _get_deps_info(): |
|
"""Overview of the installed version of main dependencies |
|
|
|
This function does not import the modules to collect the version numbers |
|
but instead relies on standard Python package metadata. |
|
|
|
Returns |
|
------- |
|
deps_info: dict |
|
version information on relevant Python libraries |
|
|
|
""" |
|
deps = [ |
|
"pip", |
|
"setuptools", |
|
"numpy", |
|
"scipy", |
|
"Cython", |
|
"pandas", |
|
"matplotlib", |
|
"joblib", |
|
"threadpoolctl", |
|
] |
|
|
|
deps_info = { |
|
"sklearn": __version__, |
|
} |
|
|
|
from importlib.metadata import PackageNotFoundError, version |
|
|
|
for modname in deps: |
|
try: |
|
deps_info[modname] = version(modname) |
|
except PackageNotFoundError: |
|
deps_info[modname] = None |
|
return deps_info |
|
|
|
|
|
def show_versions(): |
|
"""Print useful debugging information" |
|
|
|
.. versionadded:: 0.20 |
|
|
|
Examples |
|
-------- |
|
>>> from sklearn import show_versions |
|
>>> show_versions() # doctest: +SKIP |
|
""" |
|
|
|
sys_info = _get_sys_info() |
|
deps_info = _get_deps_info() |
|
|
|
print("\nSystem:") |
|
for k, stat in sys_info.items(): |
|
print("{k:>10}: {stat}".format(k=k, stat=stat)) |
|
|
|
print("\nPython dependencies:") |
|
for k, stat in deps_info.items(): |
|
print("{k:>13}: {stat}".format(k=k, stat=stat)) |
|
|
|
print( |
|
"\n{k}: {stat}".format( |
|
k="Built with OpenMP", stat=_openmp_parallelism_enabled() |
|
) |
|
) |
|
|
|
|
|
threadpool_results = threadpool_info() |
|
if threadpool_results: |
|
print() |
|
print("threadpoolctl info:") |
|
|
|
for i, result in enumerate(threadpool_results): |
|
for key, val in result.items(): |
|
print(f"{key:>15}: {val}") |
|
if i != len(threadpool_results) - 1: |
|
print() |
|
|