Coverage for cuda/core/_utils/version.pyx: 92.86%
28 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5import functools
6import importlib.metadata
7import re
9from cuda.core._utils.cuda_utils import driver, handle_return
12def _parse_version_triple(version_str: str) -> tuple[int, int, int]:
13 """Parse a PEP 440 version string into a (major, minor, patch) triple.
15 Strips local-version identifiers and handles pre-release suffixes such as
16 ``0b1`` or ``0rc1`` by extracting only the leading integer from each
17 release segment.
18 """
19 parts = version_str.partition("+")[0].split(".")[:3]
20 ints = ([int(m.group(1)) if (m := re.match(r"(\d+)", v)) else 0 for v in parts] + [0, 0, 0])[:3]
21 return (ints[0], ints[1], ints[2])
24@functools.cache
25def binding_version() -> tuple[int, int, int]:
26 """Return the cuda-bindings version as a (major, minor, patch) triple."""
27 try:
28 version_str = importlib.metadata.version("cuda-bindings")
29 except importlib.metadata.PackageNotFoundError:
30 version_str = importlib.metadata.version("cuda-python")
31 return _parse_version_triple(version_str)
34@functools.cache
35def driver_version() -> tuple[int, int, int]:
36 """Return the CUDA driver version as a (major, minor, patch) triple."""
37 cdef int ver = handle_return(driver.cuDriverGetVersion())
38 return (ver // 1000, (ver // 10) % 100, ver % 10)
41cdef tuple _cached_binding_version = None
42cdef tuple _cached_driver_version = None
45cdef tuple cy_binding_version():
46 global _cached_binding_version
47 if _cached_binding_version is None: 2ubvbwbxbybzbAbBbCbb d e DbEbFbGbHbIbJbKbf 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 LbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*btb+b,b-b.bF /b:b;b=b?b@b[b]b^b_b`b{b|b}b~bG acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcH I J K L M N O P Q R S T U V W c X Y Z 0 1 2 3 4 5 6 7 8 9 ! # Cc$ % DcEcFcGc' Hc( IcJcKcLcMc) * + , - . / NcOc: PcQcRcScTcUcVc; = ? @ [ ] ^ _ ` Wc{ | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbXc
48 _cached_binding_version = binding_version() 2b tb
49 return _cached_binding_version 2ubvbwbxbybzbAbBbCbb d e DbEbFbGbHbIbJbKbf 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 LbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*btb+b,b-b.bF /b:b;b=b?b@b[b]b^b_b`b{b|b}b~bG acbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcH I J K L M N O P Q R S T U V W c X Y Z 0 1 2 3 4 5 6 7 8 9 ! # Cc$ % DcEcFcGc' Hc( IcJcKcLcMc) * + , - . / NcOc: PcQcRcScTcUcVc; = ? @ [ ] ^ _ ` Wc{ | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbXc
52cdef tuple cy_driver_version():
53 global _cached_driver_version
54 if _cached_driver_version is None: 2b d e 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 c X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; YcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c= ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsb
55 _cached_driver_version = driver_version() 1bc
56 return _cached_driver_version 2b d e 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 c X Y Z 0 1 2 3 4 5 6 7 8 9 ! # $ % ' ( ) * + , - . / : ; YcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c= ? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsb