Skip to content

test_command_line_command_flag and test_command_line_import_flag: Different num_threads values #128

Open

Description

@hroncok

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

Activity

  1. mweinelt commented on Oct 14, 2022

    @mweinelt

    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions