Coverage for cuda/pathfinder/_dynamic_libs/load_dl_common.py: 100.00%

25 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-03 02:41 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# SPDX-License-Identifier: Apache-2.0 

3 

4from __future__ import annotations 

5 

6from collections.abc import Callable 

7from dataclasses import dataclass 

8from typing import TYPE_CHECKING 

9 

10if TYPE_CHECKING: 

11 from cuda.pathfinder._dynamic_libs.lib_descriptor import LibDescriptor 

12 

13 

14class DynamicLibNotFoundError(RuntimeError): 

15 pass 

16 

17 

18class DynamicLibNotAvailableError(DynamicLibNotFoundError): 

19 pass 

20 

21 

22class DynamicLibUnknownError(DynamicLibNotFoundError): 

23 pass 

24 

25 

26@dataclass 

27class LoadedDL: 

28 abs_path: str | None 

29 was_already_loaded_from_elsewhere: bool 

30 _handle_uint: int # Platform-agnostic unsigned pointer value 

31 found_via: str # "CUDA_PATH" covers both CUDA_PATH and CUDA_HOME env vars 

32 

33 

34def load_dependencies(desc: LibDescriptor, load_func: Callable[[str], LoadedDL]) -> None: 

35 """Load required dependencies, then best-effort runtime dependencies. 

36 

37 A plain ``DynamicLibNotFoundError`` from an optional dependency is 

38 suppressed. More specific contract errors and failures while loading a 

39 dependency that was found remain errors. 

40 """ 

41 for dep in desc.dependencies: 1aheifbcgd

42 load_func(dep) 1ifd

43 for dep in desc.optional_dependencies: 1ahefbcgd

44 try: 1efbcgd

45 load_func(dep) 1efbcgd

46 except DynamicLibNotFoundError as exc: 1ebcgd

47 # Both public contract errors inherit DynamicLibNotFoundError, but 

48 # neither an unknown descriptor nor platform incompatibility means 

49 # that an optional runtime component is simply absent. 

50 if type(exc) is not DynamicLibNotFoundError: 1ebcd

51 raise 1bc