Skip to content

Conversation

@cpcloud
Copy link
Contributor

@cpcloud cpcloud commented Sep 26, 2025

This PR attempts to allow developers to opt in to the info level logging
when running cuda_pathfinder tests, instead of the logging always showing up
in a summary, including when terminating tests early using ^C.

Now, if you want the extra info you have to pass --log-cli-level=INFO.

The main difference now is that the logging will be live instead of in a summary.

I would argue this is more useful when you've opted into the logging, since the
logs will appear immediately below the test name and thus can be easily associated with
the logging invocation.

Finally, this also requires less fixture hacking and less pytest configuration.

@copy-pr-bot
Copy link
Contributor

copy-pr-bot bot commented Sep 26, 2025

Auto-sync is disabled for ready for review pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@cpcloud cpcloud force-pushed the remove-info-in-favor-of-vanilla-logging branch from dcd4f86 to 95296f5 Compare September 26, 2025 16:02
@cpcloud cpcloud requested a review from rwgk September 26, 2025 16:02
@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

/ok to test

@rwgk
Copy link
Collaborator

rwgk commented Sep 26, 2025

I think it'd be unfortunate if this is merged:

  1. It's much harder to guess information than to ignore: If the output is not the default, but there are issues, there will be a lot of back and forth to communicate (e.g. with the SWQA team in another timezone) how to run the tests with the extra logging, the other party has to go back to something they did yesterday or before the weekend, then send the more complete results again. Such back and forth can easily make the difference between immediate insights and days worth of delays.

  2. The new output is much noisier. We're much more likely to overlook subtleties, only to find out later, and again we'll lose time.

What is the motivation for this PR?


Before this PR:

(WslLocalCudaVenv) rwgk-win11.localdomain:~/forked/cuda-python/cuda_pathfinder $ pytest -ra -v tests/
================================================================== test session starts ==================================================================
platform linux -- Python 3.12.3, pytest-8.4.2, pluggy-1.6.0 -- /home/rgrossekunst/forked/cuda-python/WslLocalCudaVenv/bin/python3
cachedir: .pytest_cache
rootdir: /home/rgrossekunst/forked/cuda-python
configfile: pytest.ini
collected 73 items

tests/test_find_nvidia_headers.py::test_unknown_libname PASSED                                                                                    [  1%]
tests/test_find_nvidia_headers.py::test_find_libname_nvshmem PASSED                                                                               [  2%]
tests/test_find_nvidia_headers.py::test_supported_headers_site_packages_ctk_consistency PASSED                                                    [  4%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cccl] PASSED                                                                             [  5%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cublas] PASSED                                                                           [  6%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cudart] PASSED                                                                           [  8%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cufft] PASSED                                                                            [  9%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[curand] PASSED                                                                           [ 10%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cusolver] PASSED                                                                         [ 12%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cusparse] PASSED                                                                         [ 13%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[npp] PASSED                                                                              [ 15%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvcc] PASSED                                                                             [ 16%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvfatbin] PASSED                                                                         [ 17%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvjitlink] PASSED                                                                        [ 19%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvjpeg] PASSED                                                                           [ 20%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvrtc] PASSED                                                                            [ 21%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvvm] PASSED                                                                             [ 23%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cufile] PASSED                                                                           [ 24%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_linux_sonames_consistency PASSED                                                   [ 26%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_dlls_consistency PASSED                                                    [ 27%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_linux_site_packages_libdirs_ctk_consistency PASSED                                 [ 28%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_site_packages_libdirs_ctk_consistency PASSED                               [ 30%]
tests/test_load_nvidia_dynamic_lib.py::test_libname_dict_values_are_unique[SUPPORTED_LINUX_SONAMES] PASSED                                        [ 31%]
tests/test_load_nvidia_dynamic_lib.py::test_libname_dict_values_are_unique[SUPPORTED_WINDOWS_DLLS] PASSED                                         [ 32%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_libnames_requiring_os_add_dll_directory_consistency PASSED                 [ 34%]
tests/test_load_nvidia_dynamic_lib.py::test_runtime_error_on_non_64bit_python PASSED                                                              [ 35%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cudart] PASSED                                                                [ 36%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvfatbin] PASSED                                                              [ 38%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvJitLink] PASSED                                                             [ 39%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvrtc] PASSED                                                                 [ 41%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvvm] PASSED                                                                  [ 42%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cublas] PASSED                                                                [ 43%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cublasLt] PASSED                                                              [ 45%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufft] PASSED                                                                 [ 46%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufftw] PASSED                                                                [ 47%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[curand] PASSED                                                                [ 49%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusolver] PASSED                                                              [ 50%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusolverMg] PASSED                                                            [ 52%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusparse] PASSED                                                              [ 53%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppc] PASSED                                                                  [ 54%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppial] PASSED                                                                [ 56%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppicc] PASSED                                                                [ 57%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppidei] PASSED                                                               [ 58%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppif] PASSED                                                                 [ 60%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppig] PASSED                                                                 [ 61%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppim] PASSED                                                                 [ 63%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppist] PASSED                                                                [ 64%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppisu] PASSED                                                                [ 65%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppitc] PASSED                                                                [ 67%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[npps] PASSED                                                                  [ 68%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvblas] PASSED                                                                [ 69%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvjpeg] PASSED                                                                [ 71%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufile] PASSED                                                                [ 72%]
tests/test_spawned_process_runner.py::test_rethrow_child_exception PASSED                                                                         [ 73%]
tests/test_utils_env_vars.py::test_returns_none_when_unset PASSED                                                                                 [ 75%]
tests/test_utils_env_vars.py::test_empty_cuda_home_preserved PASSED                                                                               [ 76%]
tests/test_utils_env_vars.py::test_prefers_cuda_home_over_cuda_path PASSED                                                                        [ 78%]
tests/test_utils_env_vars.py::test_uses_cuda_path_if_home_missing PASSED                                                                          [ 79%]
tests/test_utils_env_vars.py::test_no_warning_when_textually_equal_after_normalization PASSED                                                     [ 80%]
tests/test_utils_env_vars.py::test_no_warning_on_windows_case_only_difference SKIPPED (Windows-specific case-folding check)                       [ 82%]
tests/test_utils_env_vars.py::test_warning_when_both_exist_and_are_different PASSED                                                               [ 83%]
tests/test_utils_env_vars.py::test_nonexistent_paths_fall_back_to_text_comparison PASSED                                                          [ 84%]
tests/test_utils_env_vars.py::test_samefile_equivalence_via_symlink_when_possible PASSED                                                          [ 86%]
tests/test_utils_env_vars.py::test_paths_differ_text_only PASSED                                                                                  [ 87%]
tests/test_utils_env_vars.py::test_paths_differ_samefile PASSED                                                                                   [ 89%]
tests/test_utils_find_sub_dirs.py::test_exact_match PASSED                                                                                        [ 90%]
tests/test_utils_find_sub_dirs.py::test_single_wildcard PASSED                                                                                    [ 91%]
tests/test_utils_find_sub_dirs.py::test_double_wildcard PASSED                                                                                    [ 93%]
tests/test_utils_find_sub_dirs.py::test_no_match PASSED                                                                                           [ 94%]
tests/test_utils_find_sub_dirs.py::test_empty_parent_paths PASSED                                                                                 [ 95%]
tests/test_utils_find_sub_dirs.py::test_empty_sub_dirs PASSED                                                                                     [ 97%]
tests/test_utils_find_sub_dirs.py::test_find_sub_dirs_sys_path_no_math PASSED                                                                     [ 98%]
tests/test_utils_find_sub_dirs.py::test_find_sub_dirs_all_sitepackages_no_match PASSED                                                            [100%]

===================================================================== INFO summary ======================================================================
INFO test_find_libname_nvshmem: hdr_dir='/usr/include/nvshmem_13'
INFO test_find_ctk_headers[cccl]: hdr_dir=None
INFO test_find_ctk_headers[cublas]: hdr_dir=None
INFO test_find_ctk_headers[cudart]: hdr_dir=None
INFO test_find_ctk_headers[cufft]: hdr_dir=None
INFO test_find_ctk_headers[curand]: hdr_dir=None
INFO test_find_ctk_headers[cusolver]: hdr_dir=None
INFO test_find_ctk_headers[cusparse]: hdr_dir=None
INFO test_find_ctk_headers[npp]: hdr_dir=None
INFO test_find_ctk_headers[nvcc]: hdr_dir=None
INFO test_find_ctk_headers[nvfatbin]: hdr_dir=None
INFO test_find_ctk_headers[nvjitlink]: hdr_dir=None
INFO test_find_ctk_headers[nvjpeg]: hdr_dir=None
INFO test_find_ctk_headers[nvrtc]: hdr_dir=None
INFO test_find_ctk_headers[nvvm]: hdr_dir=None
INFO test_find_ctk_headers[cufile]: hdr_dir=None
INFO test_load_nvidia_dynamic_lib[cudart]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcudart.so.13
INFO test_load_nvidia_dynamic_lib[nvfatbin]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvfatbin.so.13
INFO test_load_nvidia_dynamic_lib[nvJitLink]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvJitLink.so.13
INFO test_load_nvidia_dynamic_lib[nvrtc]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvrtc.so.13
INFO test_load_nvidia_dynamic_lib[nvvm]: Not found: libname='nvvm'
INFO test_load_nvidia_dynamic_lib[cublas]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcublas.so.13
INFO test_load_nvidia_dynamic_lib[cublasLt]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcublasLt.so.13
INFO test_load_nvidia_dynamic_lib[cufft]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcufft.so.12
INFO test_load_nvidia_dynamic_lib[cufftw]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcufftw.so.12
INFO test_load_nvidia_dynamic_lib[curand]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcurand.so.10
INFO test_load_nvidia_dynamic_lib[cusolver]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcusolver.so.12
INFO test_load_nvidia_dynamic_lib[cusolverMg]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcusolverMg.so.12
INFO test_load_nvidia_dynamic_lib[cusparse]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcusparse.so.12
INFO test_load_nvidia_dynamic_lib[nppc]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppc.so.13
INFO test_load_nvidia_dynamic_lib[nppial]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppial.so.13
INFO test_load_nvidia_dynamic_lib[nppicc]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppicc.so.13
INFO test_load_nvidia_dynamic_lib[nppidei]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppidei.so.13
INFO test_load_nvidia_dynamic_lib[nppif]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppif.so.13
INFO test_load_nvidia_dynamic_lib[nppig]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppig.so.13
INFO test_load_nvidia_dynamic_lib[nppim]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppim.so.13
INFO test_load_nvidia_dynamic_lib[nppist]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppist.so.13
INFO test_load_nvidia_dynamic_lib[nppisu]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppisu.so.13
INFO test_load_nvidia_dynamic_lib[nppitc]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppitc.so.13
INFO test_load_nvidia_dynamic_lib[npps]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnpps.so.13
INFO test_load_nvidia_dynamic_lib[nvblas]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvblas.so.13
INFO test_load_nvidia_dynamic_lib[nvjpeg]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvjpeg.so.13
INFO test_load_nvidia_dynamic_lib[cufile]: abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcufile.so.0
================================================================ short test summary info ================================================================
SKIPPED [1] tests/test_utils_env_vars.py:81: Windows-specific case-folding check
============================================================= 72 passed, 1 skipped in 3.33s =============================================================

With this PR:

(WslLocalCudaVenv) rwgk-win11.localdomain:~/forked/cuda-python/cuda_pathfinder $ pytest -ra --log-cli-level=INFO -v tests/
================================================================== test session starts ==================================================================
platform linux -- Python 3.12.3, pytest-8.4.2, pluggy-1.6.0 -- /home/rgrossekunst/forked/cuda-python/WslLocalCudaVenv/bin/python3
cachedir: .pytest_cache
rootdir: /home/rgrossekunst/forked/cuda-python
configfile: pytest.ini
collected 73 items

tests/test_find_nvidia_headers.py::test_unknown_libname PASSED                                                                                    [  1%]
tests/test_find_nvidia_headers.py::test_find_libname_nvshmem
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:51 hdr_dir='/usr/include/nvshmem_13'
PASSED                                                                                                                                            [  2%]
tests/test_find_nvidia_headers.py::test_supported_headers_site_packages_ctk_consistency PASSED                                                    [  4%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cccl]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [  5%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cublas]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [  6%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cudart]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [  8%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cufft]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [  9%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[curand]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 10%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cusolver]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 12%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cusparse]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 13%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[npp]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 15%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvcc]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 16%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvfatbin]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 17%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvjitlink]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 19%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvjpeg]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 20%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvrtc]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 21%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvvm]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 23%]
tests/test_find_nvidia_headers.py::test_find_ctk_headers[cufile]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_find_nvidia_headers.py:76 hdr_dir=None
PASSED                                                                                                                                            [ 24%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_linux_sonames_consistency PASSED                                                   [ 26%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_dlls_consistency PASSED                                                    [ 27%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_linux_site_packages_libdirs_ctk_consistency PASSED                                 [ 28%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_site_packages_libdirs_ctk_consistency PASSED                               [ 30%]
tests/test_load_nvidia_dynamic_lib.py::test_libname_dict_values_are_unique[SUPPORTED_LINUX_SONAMES] PASSED                                        [ 31%]
tests/test_load_nvidia_dynamic_lib.py::test_libname_dict_values_are_unique[SUPPORTED_WINDOWS_DLLS] PASSED                                         [ 32%]
tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_libnames_requiring_os_add_dll_directory_consistency PASSED                 [ 34%]
tests/test_load_nvidia_dynamic_lib.py::test_runtime_error_on_non_64bit_python PASSED                                                              [ 35%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cudart]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcudart.so.13
PASSED                                                                                                                                            [ 36%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvfatbin]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvfatbin.so.13
PASSED                                                                                                                                            [ 38%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvJitLink]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvJitLink.so.13
PASSED                                                                                                                                            [ 39%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvrtc]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvrtc.so.13
PASSED                                                                                                                                            [ 41%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvvm]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:114 Not found: libname='nvvm'
PASSED                                                                                                                                            [ 42%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cublas]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcublas.so.13
PASSED                                                                                                                                            [ 43%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cublasLt]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcublasLt.so.13
PASSED                                                                                                                                            [ 45%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufft]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcufft.so.12
PASSED                                                                                                                                            [ 46%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufftw]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcufftw.so.12
PASSED                                                                                                                                            [ 47%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[curand]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcurand.so.10
PASSED                                                                                                                                            [ 49%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusolver]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcusolver.so.12
PASSED                                                                                                                                            [ 50%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusolverMg]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcusolverMg.so.12
PASSED                                                                                                                                            [ 52%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusparse]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcusparse.so.12
PASSED                                                                                                                                            [ 53%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppc]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppc.so.13
PASSED                                                                                                                                            [ 54%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppial]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppial.so.13
PASSED                                                                                                                                            [ 56%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppicc]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppicc.so.13
PASSED                                                                                                                                            [ 57%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppidei]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppidei.so.13
PASSED                                                                                                                                            [ 58%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppif]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppif.so.13
PASSED                                                                                                                                            [ 60%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppig]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppig.so.13
PASSED                                                                                                                                            [ 61%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppim]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppim.so.13
PASSED                                                                                                                                            [ 63%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppist]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppist.so.13
PASSED                                                                                                                                            [ 64%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppisu]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppisu.so.13
PASSED                                                                                                                                            [ 65%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppitc]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnppitc.so.13
PASSED                                                                                                                                            [ 67%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[npps]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnpps.so.13
PASSED                                                                                                                                            [ 68%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvblas]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvblas.so.13
PASSED                                                                                                                                            [ 69%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvjpeg]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libnvjpeg.so.13
PASSED                                                                                                                                            [ 71%]
tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufile]
--------------------------------------------------------------------- live log call ---------------------------------------------------------------------
INFO     root:test_load_nvidia_dynamic_lib.py:117 abs_path=/usr/local/cuda-13.0/targets/x86_64-linux/lib/libcufile.so.0
PASSED                                                                                                                                            [ 72%]
tests/test_spawned_process_runner.py::test_rethrow_child_exception PASSED                                                                         [ 73%]
tests/test_utils_env_vars.py::test_returns_none_when_unset PASSED                                                                                 [ 75%]
tests/test_utils_env_vars.py::test_empty_cuda_home_preserved PASSED                                                                               [ 76%]
tests/test_utils_env_vars.py::test_prefers_cuda_home_over_cuda_path PASSED                                                                        [ 78%]
tests/test_utils_env_vars.py::test_uses_cuda_path_if_home_missing PASSED                                                                          [ 79%]
tests/test_utils_env_vars.py::test_no_warning_when_textually_equal_after_normalization PASSED                                                     [ 80%]
tests/test_utils_env_vars.py::test_no_warning_on_windows_case_only_difference SKIPPED (Windows-specific case-folding check)                       [ 82%]
tests/test_utils_env_vars.py::test_warning_when_both_exist_and_are_different PASSED                                                               [ 83%]
tests/test_utils_env_vars.py::test_nonexistent_paths_fall_back_to_text_comparison PASSED                                                          [ 84%]
tests/test_utils_env_vars.py::test_samefile_equivalence_via_symlink_when_possible PASSED                                                          [ 86%]
tests/test_utils_env_vars.py::test_paths_differ_text_only PASSED                                                                                  [ 87%]
tests/test_utils_env_vars.py::test_paths_differ_samefile PASSED                                                                                   [ 89%]
tests/test_utils_find_sub_dirs.py::test_exact_match PASSED                                                                                        [ 90%]
tests/test_utils_find_sub_dirs.py::test_single_wildcard PASSED                                                                                    [ 91%]
tests/test_utils_find_sub_dirs.py::test_double_wildcard PASSED                                                                                    [ 93%]
tests/test_utils_find_sub_dirs.py::test_no_match PASSED                                                                                           [ 94%]
tests/test_utils_find_sub_dirs.py::test_empty_parent_paths PASSED                                                                                 [ 95%]
tests/test_utils_find_sub_dirs.py::test_empty_sub_dirs PASSED                                                                                     [ 97%]
tests/test_utils_find_sub_dirs.py::test_find_sub_dirs_sys_path_no_math PASSED                                                                     [ 98%]
tests/test_utils_find_sub_dirs.py::test_find_sub_dirs_all_sitepackages_no_match PASSED                                                            [100%]

================================================================ short test summary info ================================================================
SKIPPED [1] tests/test_utils_env_vars.py:81: Windows-specific case-folding check
============================================================= 72 passed, 1 skipped in 3.29s =============================================================

@github-actions
Copy link

@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

What is the motivation for this PR?

The motivation is that I see large amounts of output in the summary when I run cuda_pathfinder tests, especially when running the free-threaded tests. There's a single INFO line per test invocation, which leads to huge amounts of repeated output.

The effect is that I ignore it entirely because I would never use this information to debug the library. A bunch of it is "print the value of a variable", which I can do inside the interpreter using breakpoint() or using the standard logging module.

The new output is much noisier. We're much more likely to overlook subtleties, only to find out later, and again we'll lose time.

I don't think I follow why per test logging would lead to more overlooking. I think it is noisier, but I don't understand how the new output is significantly worse than the old.

Personally I overlook this output every time, because the signal to noise ratio is very low.

Can we at least make the summary opt in? It's really cumbersome to have to sift through all the output every time I run the test suite.

@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

There's also an argument for using builtin tools instead of rolling our own custom fixtures: it's overall less maintenance because they are simpler to understand and operate. The current fixture-returning-a-function seems unnecessarily complex.

@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

Wait, also, logging will show up on failed tests by default, and isn't that where we want to see the summary anyway?

@rwgk
Copy link
Collaborator

rwgk commented Sep 26, 2025

Would it work for your purposes if we tied the INFO summary on/off to pytest -v? (I don't know how feasible that is; first checking if that could work for you.)

We could tell the SWQA teams to always run with -v, that's a good habit to have in general in such a situation.

Another idea: Could you help me understand your situation more by giving me a reproducer for this:

It's really cumbersome to have to sift through all the output every time I run the test suite.

@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

Could you help me understand your situation more by giving me a reproducer for this:

python -Xgil=1 -m pytest cuda_pathfinder/tests --threads 1 --iterations 20

You need a python3.13 or python3.14 free-threaded build for that command to work (along with the pytest-freethreaded plugin)

@rwgk
Copy link
Collaborator

rwgk commented Sep 26, 2025

Wait, also, logging will show up on failed tests by default, and isn't that where we want to see the summary anyway?

It's more subtle: It can be really important to see which abs_path was found. Finding the "wrong" one can look like a success even if it's a failure by some other measure. The problem with the pathfinder tests is that they are by design highly sensitive to the exact environment the tests run in, including environment variables and things like /etc/ld.so.conf.d/.

I'll play with your command, thanks!

@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

The -v isn't great, because it's almost certainly going to require a hack, and it's changing the tool's existing behavior, which I really think we should avoid.

I want to have a way to enable this that explicitly opts-in and leave things as-is by default.

@rwgk
Copy link
Collaborator

rwgk commented Sep 26, 2025

I want to have a way to enable this that explicitly opts-in and leave things as-is by default.

That's at odds with why I chose the INFO summary route ("It's much harder to guess information than to ignore").

Let's please try a little harder to not just replace one problem with another.

I agree we shouldn't create a distracting flood in your development workflow.

@rwgk
Copy link
Collaborator

rwgk commented Sep 26, 2025

I'm experimenting with this PR as-is, except that I added two prints:

diff --git a/cuda_pathfinder/tests/test_find_nvidia_headers.py b/cuda_pathfinder/tests/test_find_nvidia_headers.py
index ac00291c5..b60f50d8d 100644
--- a/cuda_pathfinder/tests/test_find_nvidia_headers.py
+++ b/cuda_pathfinder/tests/test_find_nvidia_headers.py
@@ -72,6 +72,7 @@ def test_supported_headers_site_packages_ctk_consistency():

 @pytest.mark.parametrize("libname", SUPPORTED_HEADERS_CTK.keys())
 def test_find_ctk_headers(libname):
+    print(f"\nLOOOK test_find_ctk_headers({libname=!r})", flush=True)
     hdr_dir = find_nvidia_header_directory(libname)
     logging.info(f"{hdr_dir=!r}")
     if hdr_dir:
diff --git a/cuda_pathfinder/tests/test_load_nvidia_dynamic_lib.py b/cuda_pathfinder/tests/test_load_nvidia_dynamic_lib.py
index 6fa3a2930..38e497a2e 100644
--- a/cuda_pathfinder/tests/test_load_nvidia_dynamic_lib.py
+++ b/cuda_pathfinder/tests/test_load_nvidia_dynamic_lib.py
@@ -95,6 +95,7 @@ def _get_libnames_for_test_load_nvidia_dynamic_lib():

 @pytest.mark.parametrize("libname", _get_libnames_for_test_load_nvidia_dynamic_lib())
 def test_load_nvidia_dynamic_lib(libname):
+    print(f"\nLOOOK test_load_nvidia_dynamic_lib({libname=!r})", flush=True)
     # We intentionally run each dynamic library operation in a child process
     # to ensure isolation of global dynamic linking state (e.g., dlopen handles).
     # Without child processes, loading/unloading libraries during testing could

I'm using this (Ubuntu 24.04 WSL2 on Windows 11 24H2):

conda create --yes -n py313t python=3.13 python-freethreading
conda activate 
pip install pytest-freethreaded
cd cuda-python/cuda_pathfinder
pip install -v -e .[test]

With that I see the below.

Each test is run 201 times.

What could explain that? (It's NOT this PR I'm sure. Also not my prints: test_load_nvidia_dynamic_lib.py is much slower than usual also without the extra print.)


(py313t) rwgk-win11.localdomain:~/forked/cuda-python/cuda_pathfinder $ pytest -ra -s -v tests/test_find_nvidia_headers.py | grep -v '^$' | uniq -c
      1 ============================= test session starts ==============================
      1 platform linux -- Python 3.13.7, pytest-8.4.2, pluggy-1.6.0 -- /home/rgrossekunst/miniforge3/envs/py313t/bin/python3.13
      1 cachedir: .pytest_cache
      1 rootdir: /home/rgrossekunst/forked/cuda-python
      1 configfile: pytest.ini
      1 plugins: freethreaded-0.1.0
      1 collecting ... collected 18 items
      1 tests/test_find_nvidia_headers.py::test_unknown_libname PASSED
      1 tests/test_find_nvidia_headers.py::test_find_libname_nvshmem PASSED
      1 tests/test_find_nvidia_headers.py::test_supported_headers_site_packages_ctk_consistency PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[cccl]
    201 LOOOK test_find_ctk_headers(libname='cccl')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[cublas]
    201 LOOOK test_find_ctk_headers(libname='cublas')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[cudart]
    201 LOOOK test_find_ctk_headers(libname='cudart')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[cufft]
    201 LOOOK test_find_ctk_headers(libname='cufft')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[curand]
    201 LOOOK test_find_ctk_headers(libname='curand')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[cusolver]
    201 LOOOK test_find_ctk_headers(libname='cusolver')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[cusparse]
    201 LOOOK test_find_ctk_headers(libname='cusparse')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[npp]
    201 LOOOK test_find_ctk_headers(libname='npp')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvcc]
    201 LOOOK test_find_ctk_headers(libname='nvcc')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvfatbin]
    201 LOOOK test_find_ctk_headers(libname='nvfatbin')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvjitlink]
    201 LOOOK test_find_ctk_headers(libname='nvjitlink')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvjpeg]
    201 LOOOK test_find_ctk_headers(libname='nvjpeg')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvrtc]
    201 LOOOK test_find_ctk_headers(libname='nvrtc')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[nvvm]
    201 LOOOK test_find_ctk_headers(libname='nvvm')
      1 PASSED
      1 tests/test_find_nvidia_headers.py::test_find_ctk_headers[cufile]
    201 LOOOK test_find_ctk_headers(libname='cufile')
      1 PASSED
      1 ============================== 18 passed in 0.38s ==============================

(py313t) rwgk-win11.localdomain:~/forked/cuda-python/cuda_pathfinder $ pytest -ra -s -v tests/test_load_nvidia_dynamic_lib.py | grep -v '^$' | uniq -c
      1 ============================= test session starts ==============================
      1 platform linux -- Python 3.13.7, pytest-8.4.2, pluggy-1.6.0 -- /home/rgrossekunst/miniforge3/envs/py313t/bin/python3.13
      1 cachedir: .pytest_cache
      1 rootdir: /home/rgrossekunst/forked/cuda-python
      1 configfile: pytest.ini
      1 plugins: freethreaded-0.1.0
      1 collecting ... collected 35 items
      1 tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_linux_sonames_consistency PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_dlls_consistency PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_linux_site_packages_libdirs_ctk_consistency PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_site_packages_libdirs_ctk_consistency PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_libname_dict_values_are_unique[SUPPORTED_LINUX_SONAMES] PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_libname_dict_values_are_unique[SUPPORTED_WINDOWS_DLLS] PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_supported_libnames_windows_libnames_requiring_os_add_dll_directory_consistency PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_runtime_error_on_non_64bit_python FAILED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cudart]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cudart')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvfatbin]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nvfatbin')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvJitLink]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nvJitLink')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvrtc]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nvrtc')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvvm]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nvvm')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cublas]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cublas')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cublasLt]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cublasLt')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufft]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cufft')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufftw]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cufftw')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[curand]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='curand')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusolver]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cusolver')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusolverMg]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cusolverMg')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cusparse]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cusparse')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppc]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppc')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppial]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppial')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppicc]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppicc')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppidei]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppidei')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppif]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppif')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppig]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppig')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppim]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppim')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppist]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppist')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppisu]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppisu')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nppitc]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nppitc')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[npps]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='npps')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvblas]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nvblas')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[nvjpeg]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='nvjpeg')
      1 PASSED
      1 tests/test_load_nvidia_dynamic_lib.py::test_load_nvidia_dynamic_lib[cufile]
    201 LOOOK test_load_nvidia_dynamic_lib(libname='cufile')
      1 PASSED
      1 =================================== FAILURES ===================================
      1 ____________________ test_runtime_error_on_non_64bit_python ____________________
      1     def test_runtime_error_on_non_64bit_python():
      1         with (
      1             patch("struct.calcsize", return_value=3),  # fake 24-bit pointer
      1             pytest.raises(RuntimeError, match=r"requires 64-bit Python\. Currently running: 24-bit Python"),
      1         ):
      1 >           load_nvidia_dynamic_lib("not_used")
      1 tests/test_load_nvidia_dynamic_lib.py:72:
      1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      1 cuda/pathfinder/_dynamic_libs/load_nvidia_dynamic_lib.py:132: in load_nvidia_dynamic_lib
      1     return _load_lib_no_cache(libname)
      1            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      1 cuda/pathfinder/_dynamic_libs/load_nvidia_dynamic_lib.py:51: in _load_lib_no_cache
      1     finder.raise_not_found_error()
      1 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
      1 self = <cuda.pathfinder._dynamic_libs.find_nvidia_dynamic_lib._FindNvidiaDynamicLib object at 0x55092270310>
      1     def raise_not_found_error(self) -> None:
      1         err = ", ".join(self.error_messages)
      1         att = "\n".join(self.attachments)
      1 >       raise DynamicLibNotFoundError(f'Failure finding "{self.lib_searched_for}": {err}\n{att}')
      1 E       cuda.pathfinder._dynamic_libs.load_dl_common.DynamicLibNotFoundError: Failure finding "libnot_used.so": No such file: /home/rgrossekunst/miniforge3/envs/py313t/lib/libnot_used.so
      1 E         listdir("/home/rgrossekunst/miniforge3/envs/py313t/lib"):
      1 E           cmake
      1 E           itcl4.2.3
      1 E           libatomic.so
      1 E           libatomic.so.1
      1 E           libatomic.so.1.2.0
      1 E           libbz2.a
      1 E           libbz2.so
      1 E           libbz2.so.1.0
      1 E           libbz2.so.1.0.8
      1 E           libcrypto.so
      1 E           libcrypto.so.3
      1 E           libexpat.so.1
      1 E           libexpat.so.1.10.2
      1 E           libffi.a
      1 E           libffi.so
      1 E           libffi.so.8
      1 E           libffi.so.8.1.4
      1 E           libform.so
      1 E           libform.so.6
      1 E           libform.so.6.5
      1 E           libformw.so
      1 E           libformw.so.6
      1 E           libformw.so.6.5
      1 E           libgcc_s.so
      1 E           libgcc_s.so.1
      1 E           libgomp.so
      1 E           libgomp.so.1
      1 E           libgomp.so.1.0.0
      1 E           libhistory.so
      1 E           libhistory.so.8
      1 E           libhistory.so.8.2
      1 E           libitm.so
      1 E           libitm.so.1
      1 E           libitm.so.1.0.0
      1 E           liblzma.so.5
      1 E           liblzma.so.5.8.1
      1 E           libmenu.so
      1 E           libmenu.so.6
      1 E           libmenu.so.6.5
      1 E           libmenuw.so
      1 E           libmenuw.so.6
      1 E           libmenuw.so.6.5
      1 E           libmpdec.so.4
      1 E           libmpdec.so.4.0.0
      1 E           libncurses++.a
      1 E           libncurses++w.a
      1 E           libncurses.so
      1 E           libncurses.so.6
      1 E           libncurses.so.6.5
      1 E           libncursesw.so
      1 E           libncursesw.so.6
      1 E           libncursesw.so.6.5
      1 E           libpanel.so
      1 E           libpanel.so.6
      1 E           libpanel.so.6.5
      1 E           libpanelw.so
      1 E           libpanelw.so.6
      1 E           libpanelw.so.6.5
      1 E           libpython3.13t.so
      1 E           libpython3.13t.so.1.0
      1 E           libpython3.so
      1 E           libquadmath.so
      1 E           libquadmath.so.0
      1 E           libquadmath.so.0.0.0
      1 E           libreadline.so
      1 E           libreadline.so.8
      1 E           libreadline.so.8.2
      1 E           libsqlite3.so
      1 E           libsqlite3.so.0
      1 E           libsqlite3.so.3.50.4
      1 E           libssl.so
      1 E           libssl.so.3
      1 E           libtcl8.6.so
      1 E           libtclstub8.6.a
      1 E           libtinfo.so
      1 E           libtinfo.so.6
      1 E           libtinfo.so.6.5
      1 E           libtinfow.so
      1 E           libtinfow.so.6
      1 E           libtinfow.so.6.5
      1 E           libtk8.6.so
      1 E           libtkstub8.6.a
      1 E           libuuid.a
      1 E           libuuid.so
      1 E           libuuid.so.1
      1 E           libuuid.so.1.3.0
      1 E           libz.so.1
      1 E           libz.so.1.3.1
      1 E           pkgconfig
      1 E           python3.13
      1 E           python3.13t
      1 E           sqlite3.40.0
      1 E           tcl8
      1 E           tcl8.6
      1 E           tclConfig.sh
      1 E           tclooConfig.sh
      1 E           tdbc1.1.5
      1 E           tdbcmysql1.1.5
      1 E           tdbcodbc1.1.5
      1 E           tdbcpostgres1.1.5
      1 E           terminfo
      1 E           thread2.8.8
      1 E           tk8.6
      1 E           tkConfig.sh
      1 cuda/pathfinder/_dynamic_libs/find_nvidia_dynamic_lib.py:210: DynamicLibNotFoundError
      1 During handling of the above exception, another exception occurred:
      1     def test_runtime_error_on_non_64bit_python():
      1         with (
      1             patch("struct.calcsize", return_value=3),  # fake 24-bit pointer
      1 >           pytest.raises(RuntimeError, match=r"requires 64-bit Python\. Currently running: 24-bit Python"),
      1             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      1         ):
      1 E       AssertionError: Regex pattern did not match.
      1 E        Regex: 'requires 64-bit Python\\. Currently running: 24-bit Python'
      1 E        Input: 'Failure finding "libnot_used.so": No such file: /home/rgrossekunst/miniforge3/envs/py313t/lib/libnot_used.so\n  listdir("/home/rgrossekunst/miniforge3/envs/py313t/lib"):\n    cmake\n    itcl4.2.3\n    libatomic.so\n    libatomic.so.1\n    libatomic.so.1.2.0\n    libbz2.a\n    libbz2.so\n    libbz2.so.1.0\n    libbz2.so.1.0.8\n    libcrypto.so\n    libcrypto.so.3\n    libexpat.so.1\n    libexpat.so.1.10.2\n    libffi.a\n    libffi.so\n    libffi.so.8\n    libffi.so.8.1.4\n    libform.so\n    libform.so.6\n    libform.so.6.5\n    libformw.so\n    libformw.so.6\n    libformw.so.6.5\n    libgcc_s.so\n    libgcc_s.so.1\n    libgomp.so\n    libgomp.so.1\n    libgomp.so.1.0.0\n    libhistory.so\n    libhistory.so.8\n    libhistory.so.8.2\n    libitm.so\n    libitm.so.1\n    libitm.so.1.0.0\n    liblzma.so.5\n    liblzma.so.5.8.1\n    libmenu.so\n    libmenu.so.6\n    libmenu.so.6.5\n    libmenuw.so\n    libmenuw.so.6\n    libmenuw.so.6.5\n    libmpdec.so.4\n    libmpdec.so.4.0.0\n    libncurses++.a\n    libncurses++w.a\n    libncurses.so\n    libncurses.so.6\n    libncurses.so.6.5\n    libncursesw.so\n    libncursesw.so.6\n    libncursesw.so.6.5\n    libpanel.so\n    libpanel.so.6\n    libpanel.so.6.5\n    libpanelw.so\n    libpanelw.so.6\n    libpanelw.so.6.5\n    libpython3.13t.so\n    libpython3.13t.so.1.0\n    libpython3.so\n    libquadmath.so\n    libquadmath.so.0\n    libquadmath.so.0.0.0\n    libreadline.so\n    libreadline.so.8\n    libreadline.so.8.2\n    libsqlite3.so\n    libsqlite3.so.0\n    libsqlite3.so.3.50.4\n    libssl.so\n    libssl.so.3\n    libtcl8.6.so\n    libtclstub8.6.a\n    libtinfo.so\n    libtinfo.so.6\n    libtinfo.so.6.5\n    libtinfow.so\n    libtinfow.so.6\n    libtinfow.so.6.5\n    libtk8.6.so\n    libtkstub8.6.a\n    libuuid.a\n    libuuid.so\n    libuuid.so.1\n    libuuid.so.1.3.0\n    libz.so.1\n    libz.so.1.3.1\n    pkgconfig\n    python3.13\n    python3.13t\n    sqlite3.40.0\n    tcl8\n    tcl8.6\n    tclConfig.sh\n    tclooConfig.sh\n    tdbc1.1.5\n    tdbcmysql1.1.5\n    tdbcodbc1.1.5\n    tdbcpostgres1.1.5\n    terminfo\n    thread2.8.8\n    tk8.6\n    tkConfig.sh'
      1 tests/test_load_nvidia_dynamic_lib.py:70: AssertionError
      1 The above exception was the direct cause of the following exception:
      1 item = <Function test_runtime_error_on_non_64bit_python>
      1     @pytest.hookimpl()
      1     def pytest_runtest_call(item: pytest.Item):
      1         # Try item.runtest()
      1         config_threads = item.config.option.threads
      1         config_iterations = item.config.option.iterations
      1         freethreaded_mark = item.get_closest_marker(name="freethreaded")
      1
      1         if freethreaded_mark:
      1             threads = freethreaded_mark.kwargs.get("threads", config_threads)
      1             iterations = freethreaded_mark.kwargs.get("iterations", config_iterations)
      1         else:
      1             iterations = config_iterations
      1             threads = config_threads
      1
      1         logger.debug("Running test %s", item.name)
      1         executor = ThreadPoolExecutor(max_workers=threads)
      1         barrier = threading.Barrier(threads)
      1         last_round = iterations % threads
      1         last_barrier = threading.Barrier(last_round) if last_round else None
      1         results = list(
      1             executor.map(
      1                 get_one_result,
      1                 repeat(item, iterations),
      1                 chain(
      1                     repeat(barrier, iterations - last_round),
      1                     repeat(last_barrier, last_round),
      1                 ),
      1             )
      1         )
      1         exceptions = [r for r in results if isinstance(r, Exception)]
      1         if not exceptions:
      1             return results[0]
      1         if len(exceptions) == len(results):
      1             raise results[0]
      1 >       raise ConcurrencyError(
      1             iterations=iterations, failures=len(exceptions), threads=threads
      1         ) from exceptions[0]
      1 E       pytest_freethreaded.plugin.ConcurrencyError: 6 failures in 200 iterations across 10 threads
      1 ../../../miniforge3/envs/py313t/lib/python3.13t/site-packages/pytest_freethreaded/plugin.py:104: ConcurrencyError
      1 =========================== short test summary info ============================
      1 FAILED tests/test_load_nvidia_dynamic_lib.py::test_runtime_error_on_non_64bit_python
      1 =================== 1 failed, 34 passed in 105.84s (0:01:45) ===================

@rwgk
Copy link
Collaborator

rwgk commented Sep 26, 2025

Dumping an alternative tiny patch here for now:

diff --git a/cuda_pathfinder/tests/conftest.py b/cuda_pathfinder/tests/conftest.py
index cfef9a954..378c82eec 100644
--- a/cuda_pathfinder/tests/conftest.py
+++ b/cuda_pathfinder/tests/conftest.py
@@ -9,7 +9,16 @@ def pytest_configure(config):
     config.custom_info = []


+def _cli_has_flag(args, flag):
+    return any(arg == flag or arg.startswith(flag + "=") for arg in args)
+
+
 def pytest_terminal_summary(terminalreporter, exitstatus, config):  # noqa: ARG001
+    if not config.getoption("verbose"):
+        return
+    if _cli_has_flag(config.invocation_params.args, "--iterations"):
+        return
+
     if config.custom_info:
         terminalreporter.write_sep("=", "INFO summary")
         for msg in config.custom_info:

It does two things:

  • organic opt-in via -v
  • unconditionally disabling the INFO summary output if --iterations is specified.

There should be no more flooding, which I assume was in large part due to the surprising (to me) 201 repeats.

@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

This feels like an overly specific solution to support a single QA testing scenario. Why are we special-casing that scenario? Isn't it more common for a developer to simply run the tests?

@cpcloud
Copy link
Contributor Author

cpcloud commented Sep 26, 2025

@rwgk If you want to put up that patch I can close this one. My objections are noted here, so I don't think we need to keep going back and forth if the outcome is going to be that patch.

@rwgk
Copy link
Collaborator

rwgk commented Sep 26, 2025

Will do, thanks, I really appreciate if we can try and see how it goes. I'm committed to actively helping you if the feature is still causing issues in your workflow, after we try the small patch. The feature has been very useful to me. I'm usually running with -v anyway, so the opt-in will be fine for me in most situations. It's also still easy enough to tell others to add -v if needed, and we retain the concise summary where it's easy to see that all found paths line up.

@cpcloud cpcloud closed this Sep 29, 2025
@cpcloud cpcloud deleted the remove-info-in-favor-of-vanilla-logging branch September 29, 2025 16:58
github-actions bot pushed a commit that referenced this pull request Nov 10, 2025
Removed preview folders for the following PRs:
- PR #1021
- PR #1034
- PR #1052
- PR #1059
- PR #1069
- PR #1086
- PR #1090
- PR #1096
- PR #1102
- PR #1103
- PR #1106
- PR #1107
- PR #1117
- PR #1133
- PR #1140
- PR #1166
- PR #1174
- PR #1185
- PR #1188
- PR #1191
... and 41 more
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

Successfully merging this pull request may close these issues.

2 participants