Skip to content

Commit cb3ca5a

Browse files
committed
Factor out _load_nvidia_dynamic_library_no_cache() and use for exercising LoadedDL.was_already_loaded_from_elsewhere
1 parent fb0a430 commit cb3ca5a

2 files changed

Lines changed: 21 additions & 3 deletions

File tree

cuda_bindings/cuda/bindings/_path_finder/load_nvidia_dynamic_library.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ class LoadedDL:
134134
was_already_loaded_from_elsewhere: bool
135135

136136

137-
@functools.cache
138-
def load_nvidia_dynamic_library(libname: str) -> LoadedDL:
137+
def _load_nvidia_dynamic_library_no_cache(libname: str) -> LoadedDL:
139138
# Detect if the library was loaded already in some other way (i.e. not via this function).
140139
if sys.platform == "win32":
141140
for dll_name in SUPPORTED_WINDOWS_DLLS.get(libname, ()):
@@ -187,3 +186,8 @@ def load_nvidia_dynamic_library(libname: str) -> LoadedDL:
187186
except OSError as e:
188187
raise RuntimeError(f"Failed to dlopen {found.abs_path}: {e}") from e
189188
return LoadedDL(handle._handle, found.abs_path, False)
189+
190+
191+
@functools.cache
192+
def load_nvidia_dynamic_library(libname: str) -> LoadedDL:
193+
return _load_nvidia_dynamic_library_no_cache(libname)

cuda_bindings/tests/test_path_finder.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,21 @@ def test_find_or_load_nvidia_dynamic_library(api, libname):
5252
else:
5353
code = f"""\
5454
from cuda.bindings.path_finder import load_nvidia_dynamic_library
55-
load_nvidia_dynamic_library({libname!r})
55+
from cuda.bindings._path_finder.load_nvidia_dynamic_library import _load_nvidia_dynamic_library_no_cache
56+
57+
loaded_dl_fresh = load_nvidia_dynamic_library({libname!r})
58+
if loaded_dl_fresh.was_already_loaded_from_elsewhere:
59+
raise RuntimeError("loaded_dl_fresh.was_already_loaded_from_elsewhere")
60+
61+
loaded_dl_from_cache = load_nvidia_dynamic_library({libname!r})
62+
if loaded_dl_from_cache is not loaded_dl_fresh:
63+
raise RuntimeError("loaded_dl_from_cache is not loaded_dl_fresh")
64+
65+
loaded_dl_no_cache = _load_nvidia_dynamic_library_no_cache({libname!r})
66+
if not loaded_dl_no_cache.was_already_loaded_from_elsewhere:
67+
raise RuntimeError("loaded_dl_no_cache.was_already_loaded_from_elsewhere")
68+
if loaded_dl_no_cache.abs_path != loaded_dl_fresh.abs_path:
69+
raise RuntimeError(f"{{loaded_dl_no_cache.abs_path=!r}} != {{loaded_dl_fresh.abs_path=!r}}")
5670
"""
5771
result = subprocess.run(
5872
[sys.executable, "-c", code],

0 commit comments

Comments
 (0)