Skip to content

Commit fde70b1

Browse files
address reviews
1 parent d5e1abe commit fde70b1

3 files changed

Lines changed: 43 additions & 45 deletions

File tree

cuda_pathfinder/cuda/pathfinder/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from cuda.pathfinder._dynamic_libs.supported_nvidia_libs import (
1010
SUPPORTED_LIBNAMES as SUPPORTED_NVIDIA_LIBNAMES, # noqa: F401
1111
)
12-
from cuda.pathfinder._headers.find_nvidia_headers import FoundHeaderDir as FoundHeaderDir
12+
from cuda.pathfinder._headers.find_nvidia_headers import LocatedHeaderDir as LocatedHeaderDir
1313
from cuda.pathfinder._headers.find_nvidia_headers import find_nvidia_header_directory as find_nvidia_header_directory
1414
from cuda.pathfinder._headers.find_nvidia_headers import (
1515
locate_nvidia_header_directory as locate_nvidia_header_directory,

cuda_pathfinder/cuda/pathfinder/_headers/find_nvidia_headers.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616

1717
@dataclass
18-
class FoundHeaderDir:
18+
class LocatedHeaderDir:
1919
abs_path: str | None
2020
found_via: str
2121

@@ -33,16 +33,16 @@ def _joined_isfile(dirpath: str, basename: str) -> bool:
3333
return os.path.isfile(os.path.join(dirpath, basename))
3434

3535

36-
def _find_under_site_packages(sub_dir: str, h_basename: str) -> FoundHeaderDir | None:
36+
def _locate_under_site_packages(sub_dir: str, h_basename: str) -> LocatedHeaderDir | None:
3737
# Installed from a wheel
3838
hdr_dir: str # help mypy
3939
for hdr_dir in find_sub_dirs_all_sitepackages(tuple(sub_dir.split("/"))):
4040
if _joined_isfile(hdr_dir, h_basename):
41-
return FoundHeaderDir(abs_path=hdr_dir, found_via="site-packages")
41+
return LocatedHeaderDir(abs_path=hdr_dir, found_via="site-packages")
4242
return None
4343

4444

45-
def _find_based_on_ctk_layout(libname: str, h_basename: str, anchor_point: str) -> str | None:
45+
def _locate_based_on_ctk_layout(libname: str, h_basename: str, anchor_point: str) -> str | None:
4646
parts = [anchor_point]
4747
if libname == "nvvm":
4848
parts.append(libname)
@@ -64,7 +64,7 @@ def _find_based_on_ctk_layout(libname: str, h_basename: str, anchor_point: str)
6464
return None
6565

6666

67-
def _find_based_on_conda_layout(libname: str, h_basename: str, ctk_layout: bool) -> FoundHeaderDir | None:
67+
def _find_based_on_conda_layout(libname: str, h_basename: str, ctk_layout: bool) -> LocatedHeaderDir | None:
6868
conda_prefix = os.environ.get("CONDA_PREFIX")
6969
if not conda_prefix:
7070
return None
@@ -85,41 +85,41 @@ def _find_based_on_conda_layout(libname: str, h_basename: str, ctk_layout: bool)
8585
else:
8686
include_path = os.path.join(conda_prefix, "include")
8787
anchor_point = os.path.dirname(include_path)
88-
found_header_path = _find_based_on_ctk_layout(libname, h_basename, anchor_point)
88+
found_header_path = _locate_based_on_ctk_layout(libname, h_basename, anchor_point)
8989
if found_header_path:
90-
return FoundHeaderDir(abs_path=found_header_path, found_via="conda")
90+
return LocatedHeaderDir(abs_path=found_header_path, found_via="conda")
9191
return None
9292

9393

94-
def _find_ctk_header_directory(libname: str) -> FoundHeaderDir | None:
94+
def _find_ctk_header_directory(libname: str) -> LocatedHeaderDir | None:
9595
h_basename = supported_nvidia_headers.SUPPORTED_HEADERS_CTK[libname]
9696
candidate_dirs = supported_nvidia_headers.SUPPORTED_SITE_PACKAGE_HEADER_DIRS_CTK[libname]
9797

9898
for cdir in candidate_dirs:
99-
if hdr_dir := _find_under_site_packages(cdir, h_basename):
99+
if hdr_dir := _locate_under_site_packages(cdir, h_basename):
100100
return hdr_dir
101101

102102
if hdr_dir := _find_based_on_conda_layout(libname, h_basename, True):
103103
return hdr_dir
104104

105105
cuda_home = get_cuda_home_or_path()
106106
if cuda_home: # noqa: SIM102
107-
if result := _find_based_on_ctk_layout(libname, h_basename, cuda_home):
108-
return FoundHeaderDir(abs_path=result, found_via="CUDA_HOME")
107+
if result := _locate_based_on_ctk_layout(libname, h_basename, cuda_home):
108+
return LocatedHeaderDir(abs_path=result, found_via="CUDA_HOME")
109109

110110
return None
111111

112112

113113
@functools.cache
114-
def locate_nvidia_header_directory(libname: str) -> FoundHeaderDir | None:
114+
def locate_nvidia_header_directory(libname: str) -> LocatedHeaderDir | None:
115115
"""Locate the header directory for a supported NVIDIA library.
116116
117117
Args:
118118
libname (str): The short name of the library whose headers are needed
119119
(e.g., ``"nvrtc"``, ``"cusolver"``, ``"nvshmem"``).
120120
121121
Returns:
122-
FoundHeaderDir or None: A FoundHeaderDir object containing the absolute path
122+
LocatedHeaderDir or None: A LocatedHeaderDir object containing the absolute path
123123
to the discovered header directory and information about where it was found,
124124
or ``None`` if the headers cannot be found.
125125
@@ -152,7 +152,7 @@ def locate_nvidia_header_directory(libname: str) -> FoundHeaderDir | None:
152152
candidate_dirs = supported_nvidia_headers.SUPPORTED_SITE_PACKAGE_HEADER_DIRS_NON_CTK.get(libname, [])
153153

154154
for cdir in candidate_dirs:
155-
if found_hdr := _find_under_site_packages(cdir, h_basename):
155+
if found_hdr := _locate_under_site_packages(cdir, h_basename):
156156
return found_hdr
157157

158158
if found_hdr := _find_based_on_conda_layout(libname, h_basename, False):
@@ -164,7 +164,7 @@ def locate_nvidia_header_directory(libname: str) -> FoundHeaderDir | None:
164164
for hdr_dir in sorted(glob.glob(cdir), reverse=True):
165165
if _joined_isfile(hdr_dir, h_basename):
166166
# For system installs, we don't have a clear found_via, so use "system"
167-
return FoundHeaderDir(abs_path=hdr_dir, found_via="supported_install_dir")
167+
return LocatedHeaderDir(abs_path=hdr_dir, found_via="supported_install_dir")
168168
return None
169169

170170

cuda_pathfinder/tests/test_find_nvidia_headers.py

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import pytest
2121

22-
from cuda.pathfinder import FoundHeaderDir, find_nvidia_header_directory, locate_nvidia_header_directory
22+
from cuda.pathfinder import LocatedHeaderDir, find_nvidia_header_directory, locate_nvidia_header_directory
2323
from cuda.pathfinder._headers.supported_nvidia_headers import (
2424
SUPPORTED_HEADERS_CTK,
2525
SUPPORTED_HEADERS_CTK_ALL,
@@ -59,34 +59,33 @@ def have_distribution_for(libname: str) -> bool:
5959

6060
@pytest.mark.parametrize("libname", SUPPORTED_HEADERS_NON_CTK.keys())
6161
def test_locate_non_ctk_headers(info_summary_append, libname):
62-
found_header_dir = locate_nvidia_header_directory(libname)
63-
info_summary_append(f"{None if not found_header_dir else found_header_dir.abs_path=!r}")
64-
if found_header_dir:
65-
assert isinstance(found_header_dir, FoundHeaderDir)
66-
assert found_header_dir.found_via in ("site-packages", "conda", "CUDA_HOME")
67-
# old api
68-
hdr_dir = find_nvidia_header_directory(libname)
69-
assert hdr_dir == found_header_dir.abs_path
70-
71-
assert os.path.isdir(found_header_dir.abs_path)
72-
assert os.path.isfile(os.path.join(found_header_dir.abs_path, SUPPORTED_HEADERS_NON_CTK[libname]))
62+
hdr_dir = find_nvidia_header_directory(libname)
63+
located_hdr_dir = locate_nvidia_header_directory(libname)
64+
assert hdr_dir is None if not located_hdr_dir else hdr_dir == located_hdr_dir.abs_path
65+
66+
info_summary_append(f"{hdr_dir=!r}")
67+
if hdr_dir:
68+
assert isinstance(located_hdr_dir, LocatedHeaderDir)
69+
assert located_hdr_dir.found_via in ("site-packages", "conda", "CUDA_HOME")
70+
assert os.path.isdir(hdr_dir)
71+
assert os.path.isfile(os.path.join(hdr_dir, SUPPORTED_HEADERS_NON_CTK[libname]))
7372
if have_distribution_for(libname):
74-
assert found_header_dir.abs_path is not None
75-
found_header_dir_parts = found_header_dir.abs_path.split(os.path.sep)
76-
assert "site-packages" in found_header_dir_parts
73+
assert hdr_dir is not None
74+
hdr_dir_parts = hdr_dir.split(os.path.sep)
75+
assert "site-packages" in hdr_dir_parts
7776
elif STRICTNESS == "all_must_work":
78-
assert found_header_dir is not None
77+
assert hdr_dir is not None
7978
if conda_prefix := os.environ.get("CONDA_PREFIX"):
80-
assert found_header_dir.abs_path.startswith(conda_prefix)
79+
assert hdr_dir.startswith(conda_prefix)
8180
else:
8281
inst_dirs = SUPPORTED_INSTALL_DIRS_NON_CTK.get(libname)
8382
if inst_dirs is not None:
8483
for inst_dir in inst_dirs:
8584
globbed = glob.glob(inst_dir)
86-
if found_header_dir.abs_path in globbed:
85+
if hdr_dir in globbed:
8786
break
8887
else:
89-
raise RuntimeError(f"{found_header_dir.abs_path=} does not match any {inst_dirs=}")
88+
raise RuntimeError(f"{hdr_dir=} does not match any {inst_dirs=}")
9089

9190

9291
def test_supported_headers_site_packages_ctk_consistency():
@@ -95,15 +94,14 @@ def test_supported_headers_site_packages_ctk_consistency():
9594

9695
@pytest.mark.parametrize("libname", SUPPORTED_HEADERS_CTK.keys())
9796
def test_locate_ctk_headers(info_summary_append, libname):
98-
found_header_dir = locate_nvidia_header_directory(libname)
99-
info_summary_append(f"{None if not found_header_dir else found_header_dir.abs_path=!r}")
100-
if found_header_dir:
101-
# old api
102-
hdr_dir = find_nvidia_header_directory(libname)
103-
assert hdr_dir == found_header_dir.abs_path
104-
105-
assert os.path.isdir(found_header_dir.abs_path)
97+
hdr_dir = find_nvidia_header_directory(libname)
98+
located_hdr_dir = locate_nvidia_header_directory(libname)
99+
assert hdr_dir is None if not located_hdr_dir else hdr_dir == located_hdr_dir.abs_path
100+
101+
info_summary_append(f"{hdr_dir=!r}")
102+
if hdr_dir:
103+
assert os.path.isdir(hdr_dir)
106104
h_filename = SUPPORTED_HEADERS_CTK[libname]
107-
assert os.path.isfile(os.path.join(found_header_dir.abs_path, h_filename))
105+
assert os.path.isfile(os.path.join(hdr_dir, h_filename))
108106
if STRICTNESS == "all_must_work":
109-
assert found_header_dir.abs_path is not None
107+
assert hdr_dir is not None

0 commit comments

Comments
 (0)