Coverage for cuda/core/_utils/version.pyx: 20.83%

24 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 01:23 +0000

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

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5import functools 

6import importlib.metadata 

7import re 

8  

9from cuda.core._utils.cuda_utils import driver, handle_return 

10  

11# The CUDA major series that this build of cuda.core targets, 12 or 13. The 

12# value comes from the compile-time environment that build_hooks.py sets. The 

13# installed cuda-bindings has the same major, which cuda/core/__init__.py 

14# enforces at import. Python modules that must branch on the series, where 

15# `IF CUDA_CORE_BUILD_MAJOR` is not available, read this constant rather than 

16# compare binding_version(). 

17BUILD_CUDA_MAJOR: int = CUDA_CORE_BUILD_MAJOR 

18  

19  

20def _parse_version_triple(version_str: str) -> tuple[int, int, int]: 

21 """Parse a PEP 440 version string into a (major, minor, patch) triple. 

22  

23 Strips local-version identifiers and handles pre-release suffixes such as 

24 ``0b1`` or ``0rc1`` by extracting only the leading integer from each 

25 release segment. 

26 """ 

27 parts = version_str.partition("+")[0].split(".")[:3] 

28 ints = ([int(m.group(1)) if (m := re.match(r"(\d+)", v)) else 0 for v in parts] + [0, 0, 0])[:3] 

29 return (ints[0], ints[1], ints[2]) 

30  

31  

32@functools.cache 

33def binding_version() -> tuple[int, int, int]: 

34 """Return the cuda-bindings version as a (major, minor, patch) triple.""" 

35 try: 

36 version_str = importlib.metadata.version("cuda-bindings") 

37 except importlib.metadata.PackageNotFoundError: 

38 version_str = importlib.metadata.version("cuda-python") 

39 return _parse_version_triple(version_str) 

40  

41  

42@functools.cache 

43def driver_version() -> tuple[int, int, int]: 

44 """Return the CUDA driver version as a (major, minor, patch) triple.""" 

45 cdef int ver = handle_return(driver.cuDriverGetVersion()) 

46 return (ver // 1000, (ver // 10) % 100, ver % 10) 

47  

48  

49cdef tuple _cached_driver_version = None 

50  

51  

52cdef tuple cy_driver_version(): 

53 global _cached_driver_version 

54 if _cached_driver_version is None: 2d e a f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?bb @b

55 _cached_driver_version = driver_version() 1ab

56 return _cached_driver_version 2d e a f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?bb @b