Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_command_line_command_flag and test_command_line_import_flag: Different num_threads values #128

Open
hroncok opened this issue Jun 20, 2022 · 1 comment

Comments

@hroncok
Copy link

hroncok commented Jun 20, 2022

Hello.

We are currently trying to rebuild this package in Fedora for Python 3.11, but we see some suspicious test failures that occur with Python 3.11 as well as with Python 3.10.

The failures look like this:

On i686:

________________________ test_command_line_command_flag ________________________
    def test_command_line_command_flag():
        pytest.importorskip("numpy")
        output = subprocess.check_output(
            [sys.executable, "-m", "threadpoolctl", "-c", "import numpy"]
        )
        cli_info = json.loads(output.decode("utf-8"))
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 6, 'prefix': 'libgomp', ...} in [{'architecture': 'Nehalem', 'filepath': '/usr/lib/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 30, ...}, {'filepath': '/usr/lib/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 30, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:547: AssertionError
________________________ test_command_line_import_flag _________________________
    @pytest.mark.skipif(
        sys.version_info < (3, 7), reason="need recent subprocess.run options"
    )
    def test_command_line_import_flag():
        result = subprocess.run(
            [
                sys.executable,
                "-m",
                "threadpoolctl",
                "-i",
                "numpy",
                "scipy.linalg",
                "invalid_package",
                "numpy.invalid_sumodule",
            ],
            capture_output=True,
            check=True,
            encoding="utf-8",
        )
        cli_info = json.loads(result.stdout)
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 6, 'prefix': 'libgomp', ...} in [{'architecture': 'Nehalem', 'filepath': '/usr/lib/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 30, ...}, {'filepath': '/usr/lib/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 30, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:573: AssertionError

On x86_64

________________________ test_command_line_command_flag ________________________
    def test_command_line_command_flag():
        pytest.importorskip("numpy")
        output = subprocess.check_output(
            [sys.executable, "-m", "threadpoolctl", "-c", "import numpy"]
        )
        cli_info = json.loads(output.decode("utf-8"))
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 6, 'prefix': 'libgomp', ...} in [{'architecture': 'SkylakeX', 'filepath': '/usr/lib64/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 30, ...}, {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 30, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:547: AssertionError
________________________ test_command_line_import_flag _________________________
    @pytest.mark.skipif(
        sys.version_info < (3, 7), reason="need recent subprocess.run options"
    )
    def test_command_line_import_flag():
        result = subprocess.run(
            [
                sys.executable,
                "-m",
                "threadpoolctl",
                "-i",
                "numpy",
                "scipy.linalg",
                "invalid_package",
                "numpy.invalid_sumodule",
            ],
            capture_output=True,
            check=True,
            encoding="utf-8",
        )
        cli_info = json.loads(result.stdout)
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 6, 'prefix': 'libgomp', ...} in [{'architecture': 'SkylakeX', 'filepath': '/usr/lib64/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 30, ...}, {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 30, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:573: AssertionError

On ppc64le

________________________ test_command_line_command_flag ________________________
    def test_command_line_command_flag():
        pytest.importorskip("numpy")
        output = subprocess.check_output(
            [sys.executable, "-m", "threadpoolctl", "-c", "import numpy"]
        )
        cli_info = json.loads(output.decode("utf-8"))
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 8, 'prefix': 'libgomp', ...} in [{'architecture': 'POWER9', 'filepath': '/usr/lib64/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 40, ...}, {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 40, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:547: AssertionError
________________________ test_command_line_import_flag _________________________
    @pytest.mark.skipif(
        sys.version_info < (3, 7), reason="need recent subprocess.run options"
    )
    def test_command_line_import_flag():
        result = subprocess.run(
            [
                sys.executable,
                "-m",
                "threadpoolctl",
                "-i",
                "numpy",
                "scipy.linalg",
                "invalid_package",
                "numpy.invalid_sumodule",
            ],
            capture_output=True,
            check=True,
            encoding="utf-8",
        )
        cli_info = json.loads(result.stdout)
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 8, 'prefix': 'libgomp', ...} in [{'architecture': 'POWER9', 'filepath': '/usr/lib64/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 40, ...}, {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 40, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:573: AssertionError

On s390x:

________________________ test_command_line_command_flag ________________________
    def test_command_line_command_flag():
        pytest.importorskip("numpy")
        output = subprocess.check_output(
            [sys.executable, "-m", "threadpoolctl", "-c", "import numpy"]
        )
        cli_info = json.loads(output.decode("utf-8"))
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 2, 'prefix': 'libgomp', ...} in [{'architecture': 'Z14', 'filepath': '/usr/lib64/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 64, ...}, {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 64, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:547: AssertionError
________________________ test_command_line_import_flag _________________________
    @pytest.mark.skipif(
        sys.version_info < (3, 7), reason="need recent subprocess.run options"
    )
    def test_command_line_import_flag():
        result = subprocess.run(
            [
                sys.executable,
                "-m",
                "threadpoolctl",
                "-i",
                "numpy",
                "scipy.linalg",
                "invalid_package",
                "numpy.invalid_sumodule",
            ],
            capture_output=True,
            check=True,
            encoding="utf-8",
        )
        cli_info = json.loads(result.stdout)
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 2, 'prefix': 'libgomp', ...} in [{'architecture': 'Z14', 'filepath': '/usr/lib64/libopenblaso-r0.3.20.so', 'internal_api': 'openblas', 'num_threads': 64, ...}, {'filepath': '/usr/lib64/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 64, 'prefix': 'libgomp', ...}]
tests/test_threadpoolctl.py:573: AssertionError

The tests pass on aarch64. test_architecture was skipped.

It appears the num_threads value is different. Is that a real problem or just bad test expectations? Thanks

@mweinelt
Copy link

mweinelt commented Oct 14, 2022

Failing for NixOS on aarch64-linux on 3.1.0 as well.

============================= test session starts ==============================
platform linux -- Python 3.10.7, pytest-7.1.3, pluggy-1.0.0
rootdir: /build/source
collected 62 items / 1 deselected / 61 selected                                

tests/test_threadpoolctl.py ..F....ss.ss.sssss.ss.sss.............ssssss [ 72%]
s.sssss..sss.FF..                                                        [100%]

=================================== FAILURES ===================================
_______________________ test_controller_info_actualized ________________________

    def test_controller_info_actualized():
        # Check that the num_threads attribute reflects the actual state of the threadpools
        controller = ThreadpoolController()
        original_info = controller.info()
    
        with threadpool_limits(limits=1):
            assert all(
                lib_controller.num_threads == 1
                for lib_controller in controller.lib_controllers
            )
    
>       assert controller.info() == original_info
E       AssertionError: assert [{'filepath':...ds': 64, ...}] == [{'filepath':...ds': 64, ...}]
E         At index 0 diff: {'user_api': 'openmp', 'internal_api': 'openmp', 'prefix': 'libgomp', 'filepath': '/nix/store/86117znq5fakblh6pikkrgbi4f2xvfjn-gfortran-9.5.0-lib/lib/libgomp.so.1.0.0', 'version': None, 'num_threads': 64} != {'user_api': 'openmp', 'internal_api': 'openmp', 'prefix': 'libgomp', 'filepath': '/nix/store/86117znq5fakblh6pikkrgbi4f2xvfjn-gfortran-9.5.0-lib/lib/libgomp.so.1.0.0', 'version': None, 'num_threads': 80}
E         Use -v to get more diff

tests/test_threadpoolctl.py:75: AssertionError
________________________ test_command_line_command_flag ________________________

    def test_command_line_command_flag():
        pytest.importorskip("numpy")
        output = subprocess.check_output(
            [sys.executable, "-m", "threadpoolctl", "-c", "import numpy"]
        )
        cli_info = json.loads(output.decode("utf-8"))
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/nix/store/86117znq5fakblh6pikkrgbi4f2xvfjn-gfortran-9.5.0-lib/lib/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 80, 'prefix': 'libgomp', ...} in [{'filepath': '/nix/store/86117znq5fakblh6pikkrgbi4f2xvfjn-gfortran-9.5.0-lib/lib/libgomp.so.1.0.0', 'internal_api': '...qfi2ljyn73f4bfghzr60-openblas-0.3.21/lib/libopenblasp-r0.3.21.so', 'internal_api': 'openblas', 'num_threads': 64, ...}]

tests/test_threadpoolctl.py:547: AssertionError
________________________ test_command_line_import_flag _________________________

    @pytest.mark.skipif(
        sys.version_info < (3, 7), reason="need recent subprocess.run options"
    )
    def test_command_line_import_flag():
        result = subprocess.run(
            [
                sys.executable,
                "-m",
                "threadpoolctl",
                "-i",
                "numpy",
                "scipy.linalg",
                "invalid_package",
                "numpy.invalid_sumodule",
            ],
            capture_output=True,
            check=True,
            encoding="utf-8",
        )
        cli_info = json.loads(result.stdout)
    
        this_process_info = threadpool_info()
        for lib_info in cli_info:
>           assert lib_info in this_process_info
E           AssertionError: assert {'filepath': '/nix/store/86117znq5fakblh6pikkrgbi4f2xvfjn-gfortran-9.5.0-lib/lib/libgomp.so.1.0.0', 'internal_api': 'openmp', 'num_threads': 80, 'prefix': 'libgomp', ...} in [{'filepath': '/nix/store/86117znq5fakblh6pikkrgbi4f2xvfjn-gfortran-9.5.0-lib/lib/libgomp.so.1.0.0', 'internal_api': '...qfi2ljyn73f4bfghzr60-openblas-0.3.21/lib/libopenblasp-r0.3.21.so', 'internal_api': 'openblas', 'num_threads': 64, ...}]

tests/test_threadpoolctl.py:573: AssertionError

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants