import importlib import importlib.metadata import os import pathlib import subprocess import pytest import numpy as np import numpy._core.include import numpy._core.lib.pkgconfig from numpy.testing import IS_EDITABLE, IS_INSTALLED, IS_WASM, NUMPY_ROOT INCLUDE_DIR = NUMPY_ROOT / '_core' / 'include' PKG_CONFIG_DIR = NUMPY_ROOT / '_core' / 'lib' / 'pkgconfig' @pytest.mark.skipif(not IS_INSTALLED, reason="`numpy-config` not expected to be installed") @pytest.mark.skipif(IS_WASM, reason="wasm interpreter cannot start subprocess") class TestNumpyConfig: def check_numpyconfig(self, arg): p = subprocess.run(['numpy-config', arg], capture_output=True, text=True) p.check_returncode() return p.stdout.strip() def test_configtool_version(self): stdout = self.check_numpyconfig('--version') assert stdout == np.__version__ def test_configtool_cflags(self): stdout = self.check_numpyconfig('--cflags') assert f'-I{os.fspath(INCLUDE_DIR)}' in stdout def test_configtool_pkgconfigdir(self): stdout = self.check_numpyconfig('--pkgconfigdir') assert pathlib.Path(stdout) == PKG_CONFIG_DIR @pytest.mark.skipif(not IS_INSTALLED, reason="numpy must be installed to check its entrypoints") def test_pkg_config_entrypoint(): (entrypoint,) = importlib.metadata.entry_points(group='pkg_config', name='numpy') assert entrypoint.value == numpy._core.lib.pkgconfig.__name__ @pytest.mark.skipif(not IS_INSTALLED, reason="numpy.pc is only available when numpy is installed") @pytest.mark.skipif(IS_EDITABLE, reason="editable installs don't have a numpy.pc") def test_pkg_config_config_exists(): assert PKG_CONFIG_DIR.joinpath('numpy.pc').is_file()