@@ -174,6 +174,30 @@ def test_public_apis_route_through_process_wide_guard_rails(
174174 assert fake_guard_rails .calls == [(guard_rails_method_name , args )]
175175
176176
177+ def test_public_driver_libs_are_allowed_in_strict_mode (monkeypatch , tmp_path ):
178+ driver_lib_path = _touch (tmp_path / "driver-root" / "libnvidia-ml.so.1" )
179+
180+ monkeypatch .setattr (
181+ compatibility_module ,
182+ "_load_nvidia_dynamic_lib" ,
183+ lambda _libname : _loaded_dl (driver_lib_path , found_via = "system-search" ),
184+ )
185+ monkeypatch .setattr (
186+ pathfinder ,
187+ "process_wide_compatibility_guard_rails" ,
188+ CompatibilityGuardRails (driver_cuda_version = _driver_cuda_version (13000 )),
189+ )
190+
191+ def fail_raw_fallback (_libname : str ) -> LoadedDL :
192+ pytest .fail ("strict mode must not fall back to raw loading" )
193+
194+ monkeypatch .setattr (process_wide_module , "_load_nvidia_dynamic_lib" , fail_raw_fallback )
195+
196+ loaded = pathfinder .load_nvidia_dynamic_lib ("nvml" )
197+
198+ assert loaded .abs_path == driver_lib_path
199+
200+
177201@pytest .mark .parametrize ("env_value" , [None , "" ])
178202def test_public_apis_default_to_strict_when_env_var_is_unset_or_empty (monkeypatch , tmp_path , env_value ):
179203 lib_path = _touch (tmp_path / "no-version-json" / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12" )
@@ -360,6 +384,63 @@ def test_other_packaging_raises_insufficient_metadata(monkeypatch, tmp_path):
360384 guard_rails .find_bitcode_lib ("nvshmem_device" )
361385
362386
387+ def test_driver_libs_do_not_lock_ctk_anchor (monkeypatch , tmp_path ):
388+ driver_lib_path = _touch (tmp_path / "driver-root" / "libnvidia-ml.so.1" )
389+ ctk_root = tmp_path / "cuda-12.9"
390+ _write_version_json (ctk_root , "12.9.20250531" )
391+ ctk_lib_path = _touch (ctk_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12" )
392+
393+ def fake_load_nvidia_dynamic_lib (libname : str ) -> LoadedDL :
394+ if libname == "nvml" :
395+ return _loaded_dl (driver_lib_path , found_via = "system-search" )
396+ if libname == "nvrtc" :
397+ return _loaded_dl (ctk_lib_path )
398+ raise AssertionError (f"Unexpected libname: { libname !r} " )
399+
400+ monkeypatch .setattr (compatibility_module , "_load_nvidia_dynamic_lib" , fake_load_nvidia_dynamic_lib )
401+
402+ guard_rails = CompatibilityGuardRails (driver_cuda_version = _driver_cuda_version (13000 ))
403+
404+ driver_loaded = guard_rails .load_nvidia_dynamic_lib ("nvml" )
405+ ctk_loaded = guard_rails .load_nvidia_dynamic_lib ("nvrtc" )
406+
407+ assert driver_loaded .abs_path == driver_lib_path
408+ assert ctk_loaded .abs_path == ctk_lib_path
409+
410+
411+ def test_driver_libs_do_not_mask_later_ctk_mismatch (monkeypatch , tmp_path ):
412+ driver_lib_path = _touch (tmp_path / "driver-root" / "libnvidia-ml.so.1" )
413+ lib_root = tmp_path / "cuda-12.8"
414+ hdr_root = tmp_path / "cuda-12.9"
415+ _write_version_json (lib_root , "12.8.20250303" )
416+ _write_version_json (hdr_root , "12.9.20250531" )
417+
418+ lib_path = _touch (lib_root / "targets" / "x86_64-linux" / "lib" / "libnvrtc.so.12" )
419+ hdr_dir = hdr_root / "targets" / "x86_64-linux" / "include"
420+ _touch (hdr_dir / "nvrtc.h" )
421+
422+ def fake_load_nvidia_dynamic_lib (libname : str ) -> LoadedDL :
423+ if libname == "nvml" :
424+ return _loaded_dl (driver_lib_path , found_via = "system-search" )
425+ if libname == "nvrtc" :
426+ return _loaded_dl (lib_path )
427+ raise AssertionError (f"Unexpected libname: { libname !r} " )
428+
429+ monkeypatch .setattr (compatibility_module , "_load_nvidia_dynamic_lib" , fake_load_nvidia_dynamic_lib )
430+ monkeypatch .setattr (
431+ compatibility_module ,
432+ "_locate_nvidia_header_directory" ,
433+ lambda _libname : LocatedHeaderDir (abs_path = str (hdr_dir ), found_via = "CUDA_PATH" ),
434+ )
435+
436+ guard_rails = CompatibilityGuardRails (driver_cuda_version = _driver_cuda_version (13000 ))
437+ guard_rails .load_nvidia_dynamic_lib ("nvml" )
438+ guard_rails .load_nvidia_dynamic_lib ("nvrtc" )
439+
440+ with pytest .raises (CompatibilityCheckError , match = "exact CTK major.minor match" ):
441+ guard_rails .find_nvidia_header_directory ("nvrtc" )
442+
443+
363444def test_constraints_accept_string_and_tuple_forms (monkeypatch , tmp_path ):
364445 ctk_root = tmp_path / "cuda-12.9"
365446 _write_version_json (ctk_root , "12.9.20250531" )
0 commit comments