nvmath-python 0.5.0__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. nvmath/__init__.pxd +0 -0
  2. nvmath/__init__.py +37 -0
  3. nvmath/_internal/__init__.py +0 -0
  4. nvmath/_internal/layout.py +58 -0
  5. nvmath/_utils.py +363 -0
  6. nvmath/bindings/__init__.pxd +0 -0
  7. nvmath/bindings/__init__.py +44 -0
  8. nvmath/bindings/_internal/__init__.pxd +0 -0
  9. nvmath/bindings/_internal/__init__.py +0 -0
  10. nvmath/bindings/_internal/cublas.cp313-win_amd64.pyd +0 -0
  11. nvmath/bindings/_internal/cublas.pxd +518 -0
  12. nvmath/bindings/_internal/cublasLt.cp313-win_amd64.pyd +0 -0
  13. nvmath/bindings/_internal/cublasLt.pxd +54 -0
  14. nvmath/bindings/_internal/cudss.cp313-win_amd64.pyd +0 -0
  15. nvmath/bindings/_internal/cudss.pxd +44 -0
  16. nvmath/bindings/_internal/cufft.cp313-win_amd64.pyd +0 -0
  17. nvmath/bindings/_internal/cufft.pxd +69 -0
  18. nvmath/bindings/_internal/cufftMp.pxd +77 -0
  19. nvmath/bindings/_internal/curand.cp313-win_amd64.pyd +0 -0
  20. nvmath/bindings/_internal/curand.pxd +42 -0
  21. nvmath/bindings/_internal/cusolver.cp313-win_amd64.pyd +0 -0
  22. nvmath/bindings/_internal/cusolver.pxd +15 -0
  23. nvmath/bindings/_internal/cusolverDn.cp313-win_amd64.pyd +0 -0
  24. nvmath/bindings/_internal/cusolverDn.pxd +386 -0
  25. nvmath/bindings/_internal/cusparse.cp313-win_amd64.pyd +0 -0
  26. nvmath/bindings/_internal/cusparse.pxd +270 -0
  27. nvmath/bindings/_internal/mathdx.cp313-win_amd64.pyd +0 -0
  28. nvmath/bindings/_internal/mathdx.pxd +79 -0
  29. nvmath/bindings/_internal/nvshmem.pxd +29 -0
  30. nvmath/bindings/_internal/utils.cp313-win_amd64.pyd +0 -0
  31. nvmath/bindings/_internal/utils.pxd +186 -0
  32. nvmath/bindings/cublas.cp313-win_amd64.pyd +0 -0
  33. nvmath/bindings/cublas.pxd +545 -0
  34. nvmath/bindings/cublas.pyi +18 -0
  35. nvmath/bindings/cublasLt.cp313-win_amd64.pyd +0 -0
  36. nvmath/bindings/cublasLt.pxd +99 -0
  37. nvmath/bindings/cudss.cp313-win_amd64.pyd +0 -0
  38. nvmath/bindings/cudss.pxd +83 -0
  39. nvmath/bindings/cudss.pyi +249 -0
  40. nvmath/bindings/cufft.cp313-win_amd64.pyd +0 -0
  41. nvmath/bindings/cufft.pxd +114 -0
  42. nvmath/bindings/cufftMp.pxd +124 -0
  43. nvmath/bindings/curand.cp313-win_amd64.pyd +0 -0
  44. nvmath/bindings/curand.pxd +71 -0
  45. nvmath/bindings/cusolver.cp313-win_amd64.pyd +0 -0
  46. nvmath/bindings/cusolver.pxd +60 -0
  47. nvmath/bindings/cusolverDn.cp313-win_amd64.pyd +0 -0
  48. nvmath/bindings/cusolverDn.pxd +410 -0
  49. nvmath/bindings/cusparse.cp313-win_amd64.pyd +0 -0
  50. nvmath/bindings/cusparse.pxd +329 -0
  51. nvmath/bindings/cycublas.cp313-win_amd64.pyd +0 -0
  52. nvmath/bindings/cycublas.pxd +657 -0
  53. nvmath/bindings/cycublasLt.cp313-win_amd64.pyd +0 -0
  54. nvmath/bindings/cycublasLt.pxd +1010 -0
  55. nvmath/bindings/cycudss.cp313-win_amd64.pyd +0 -0
  56. nvmath/bindings/cycudss.pxd +191 -0
  57. nvmath/bindings/cycufft.cp313-win_amd64.pyd +0 -0
  58. nvmath/bindings/cycufft.pxd +320 -0
  59. nvmath/bindings/cycufftMp.pxd +333 -0
  60. nvmath/bindings/cycurand.cp313-win_amd64.pyd +0 -0
  61. nvmath/bindings/cycurand.pxd +146 -0
  62. nvmath/bindings/cycusolver.cp313-win_amd64.pyd +0 -0
  63. nvmath/bindings/cycusolver.pxd +143 -0
  64. nvmath/bindings/cycusolverDn.cp313-win_amd64.pyd +0 -0
  65. nvmath/bindings/cycusolverDn.pxd +414 -0
  66. nvmath/bindings/cycusparse.cp313-win_amd64.pyd +0 -0
  67. nvmath/bindings/cycusparse.pxd +476 -0
  68. nvmath/bindings/cymathdx.cp313-win_amd64.pyd +0 -0
  69. nvmath/bindings/cymathdx.pxd +363 -0
  70. nvmath/bindings/cynvshmem.pxd +126 -0
  71. nvmath/bindings/mathdx.cp313-win_amd64.pyd +0 -0
  72. nvmath/bindings/mathdx.pxd +131 -0
  73. nvmath/bindings/mathdx.pyi +686 -0
  74. nvmath/bindings/nvpl/__init__.pxd +0 -0
  75. nvmath/bindings/nvpl/__init__.py +11 -0
  76. nvmath/bindings/nvpl/_internal/__init__.pxd +0 -0
  77. nvmath/bindings/nvpl/_internal/__init__.py +0 -0
  78. nvmath/bindings/nvpl/_internal/fft.pxd +36 -0
  79. nvmath/bindings/nvpl/cyfft.pxd +87 -0
  80. nvmath/bindings/nvpl/fft.pxd +100 -0
  81. nvmath/bindings/nvshmem.pxd +54 -0
  82. nvmath/device/__init__.py +23 -0
  83. nvmath/device/_deprecated.py +33 -0
  84. nvmath/device/caching.py +51 -0
  85. nvmath/device/common.py +131 -0
  86. nvmath/device/common_backend.py +125 -0
  87. nvmath/device/common_cuda.py +156 -0
  88. nvmath/device/common_mathdx.py +97 -0
  89. nvmath/device/common_numba.py +159 -0
  90. nvmath/device/common_opaque_tensor.py +128 -0
  91. nvmath/device/cublasdx.py +1085 -0
  92. nvmath/device/cublasdx_backend.py +552 -0
  93. nvmath/device/cublasdx_numba.py +528 -0
  94. nvmath/device/cufftdx.py +551 -0
  95. nvmath/device/cufftdx_backend.py +194 -0
  96. nvmath/device/cufftdx_numba.py +123 -0
  97. nvmath/device/curand_kernel.py +9147 -0
  98. nvmath/device/nvrtc.py +95 -0
  99. nvmath/device/patch.py +35 -0
  100. nvmath/device/random.py +417 -0
  101. nvmath/device/random_helpers.py +23 -0
  102. nvmath/device/random_states.py +189 -0
  103. nvmath/device/types.py +11 -0
  104. nvmath/device/vector_types_numba.py +203 -0
  105. nvmath/distributed/__init__.py +117 -0
  106. nvmath/distributed/_internal/__init__.py +0 -0
  107. nvmath/distributed/_internal/nvshmem.py +243 -0
  108. nvmath/distributed/_internal/tensor_ifc_cupy.py +111 -0
  109. nvmath/distributed/_internal/tensor_ifc_numpy.py +53 -0
  110. nvmath/distributed/_internal/tensor_ifc_torch.py +108 -0
  111. nvmath/distributed/_internal/tensor_wrapper.py +59 -0
  112. nvmath/distributed/_utils.py +152 -0
  113. nvmath/distributed/fft/__init__.py +6 -0
  114. nvmath/distributed/fft/_configuration.py +86 -0
  115. nvmath/distributed/fft/fft.py +1737 -0
  116. nvmath/distributed/reshape/__init__.py +6 -0
  117. nvmath/distributed/reshape/_configuration.py +39 -0
  118. nvmath/distributed/reshape/reshape.py +1249 -0
  119. nvmath/fft/__init__.py +7 -0
  120. nvmath/fft/_configuration.py +208 -0
  121. nvmath/fft/_exec_utils.py +116 -0
  122. nvmath/fft/_helpers.py +260 -0
  123. nvmath/fft/fft.py +2346 -0
  124. nvmath/internal/__init__.py +5 -0
  125. nvmath/internal/enum_utils.py +142 -0
  126. nvmath/internal/formatters.py +87 -0
  127. nvmath/internal/mem_limit.py +51 -0
  128. nvmath/internal/package_ifc.py +119 -0
  129. nvmath/internal/package_ifc_cuda.py +43 -0
  130. nvmath/internal/package_ifc_cupy.py +49 -0
  131. nvmath/internal/package_ifc_torch.py +31 -0
  132. nvmath/internal/package_wrapper.py +14 -0
  133. nvmath/internal/tensor_ifc.py +143 -0
  134. nvmath/internal/tensor_ifc_cupy.py +185 -0
  135. nvmath/internal/tensor_ifc_numpy.py +157 -0
  136. nvmath/internal/tensor_ifc_torch.py +115 -0
  137. nvmath/internal/tensor_wrapper.py +160 -0
  138. nvmath/internal/typemaps.py +154 -0
  139. nvmath/internal/utils.py +634 -0
  140. nvmath/linalg/__init__.py +11 -0
  141. nvmath/linalg/_internal/__init__.py +3 -0
  142. nvmath/linalg/_internal/algo_cap_ifc.py +86 -0
  143. nvmath/linalg/_internal/algo_config_ifc.py +87 -0
  144. nvmath/linalg/_internal/enum_to_tuples.py +64 -0
  145. nvmath/linalg/_internal/epilog_protocol.py +738 -0
  146. nvmath/linalg/_internal/matmul_desc_ifc.py +72 -0
  147. nvmath/linalg/_internal/matmul_pref_ifc.py +65 -0
  148. nvmath/linalg/_internal/matrix_layout_ifc.py +59 -0
  149. nvmath/linalg/_internal/typemaps.py +135 -0
  150. nvmath/linalg/_internal/utils.py +96 -0
  151. nvmath/linalg/advanced/__init__.py +8 -0
  152. nvmath/linalg/advanced/_algorithmmod.py +142 -0
  153. nvmath/linalg/advanced/_configuration.py +320 -0
  154. nvmath/linalg/advanced/helpers/__init__.py +5 -0
  155. nvmath/linalg/advanced/helpers/matmul.py +173 -0
  156. nvmath/linalg/advanced/matmulmod.py +2855 -0
  157. nvmath/memory.py +266 -0
  158. nvmath/sparse/__init__.py +18 -0
  159. nvmath/sparse/_internal/__init__.py +21 -0
  160. nvmath/sparse/_internal/common_utils.py +81 -0
  161. nvmath/sparse/_internal/cudss_config_ifc.py +584 -0
  162. nvmath/sparse/_internal/cudss_data_ifc.py +291 -0
  163. nvmath/sparse/_internal/cudss_utils.py +398 -0
  164. nvmath/sparse/_internal/sparse_csr_ifc.py +154 -0
  165. nvmath/sparse/_internal/sparse_format_helpers.py +88 -0
  166. nvmath/sparse/_internal/sparse_tensor_ifc.py +80 -0
  167. nvmath/sparse/advanced/__init__.py +7 -0
  168. nvmath/sparse/advanced/_configuration.py +150 -0
  169. nvmath/sparse/advanced/direct_solver.py +1705 -0
  170. nvmath_python-0.5.0.dist-info/METADATA +122 -0
  171. nvmath_python-0.5.0.dist-info/RECORD +174 -0
  172. nvmath_python-0.5.0.dist-info/WHEEL +5 -0
  173. nvmath_python-0.5.0.dist-info/licenses/LICENSE +177 -0
  174. nvmath_python-0.5.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,86 @@
1
+ # Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ """
6
+ Interface class to encapsulate low-level calls to get algorithm capabilities information.
7
+ """
8
+
9
+ __all__ = ["AlgoCapInterface"]
10
+
11
+ import numpy as np
12
+
13
+ from nvmath.bindings import cublasLt as cublaslt
14
+ from .enum_to_tuples import ENUM_TO_MATMUL_STAGE, ENUM_TO_MATMUL_TILE
15
+
16
+ CapEnum = cublaslt.MatmulAlgoCapAttribute
17
+
18
+
19
+ def scalar_attributes():
20
+ return [e.name for e in CapEnum if not e.name.endswith("_IDS")]
21
+
22
+
23
+ CAP_ENUM_SCALAR_ATTR = scalar_attributes()
24
+
25
+
26
+ class AlgoCapInterface:
27
+ def __init__(self, algorithm):
28
+ """ """
29
+ assert isinstance(algorithm, cublaslt.MatmulHeuristicResult), "Internal error."
30
+ self.algorithm = algorithm
31
+
32
+ def __getattr__(self, name):
33
+ _name = name.upper()
34
+ if _name not in CAP_ENUM_SCALAR_ATTR:
35
+ return super().__getattr__(name)
36
+ name = _name
37
+ get_dtype = cublaslt.get_matmul_algo_cap_attribute_dtype
38
+ attribute_buffer = np.zeros((1,), dtype=get_dtype(CapEnum[name]))
39
+ size_written = np.zeros((1,), dtype=np.uint64)
40
+ cublaslt.matmul_algo_cap_get_attribute(
41
+ self.algorithm["algo"].ctypes.data,
42
+ CapEnum[name].value,
43
+ attribute_buffer.ctypes.data,
44
+ attribute_buffer.itemsize,
45
+ size_written.ctypes.data,
46
+ )
47
+ return attribute_buffer[0]
48
+
49
+ def _get_array_attribute(self, name, enum_to_value_map):
50
+ assert name in ["TILE_IDS", "STAGES_IDS"], "Internal error."
51
+
52
+ get_dtype = cublaslt.get_matmul_algo_cap_attribute_dtype
53
+ dtype = get_dtype(CapEnum[name])
54
+ size_written = np.zeros((1,), dtype=np.uint64)
55
+
56
+ # First get the buffer size needed.
57
+ cublaslt.matmul_algo_cap_get_attribute(
58
+ self.algorithm["algo"].ctypes.data, CapEnum[name].value, 0, 0, size_written.ctypes.data
59
+ )
60
+
61
+ # Check if any data needs to be written.
62
+ size = size_written[0]
63
+ if size == 0:
64
+ return ()
65
+
66
+ # Then allocate the buffer and get the data.
67
+ num = int(size // dtype().itemsize)
68
+ attribute_buffer = np.zeros((num,), dtype=dtype)
69
+ cublaslt.matmul_algo_cap_get_attribute(
70
+ self.algorithm["algo"].ctypes.data,
71
+ CapEnum[name].value,
72
+ attribute_buffer.ctypes.data,
73
+ size,
74
+ size_written.ctypes.data,
75
+ )
76
+
77
+ # Convert to value.
78
+ return tuple(enum_to_value_map[e] for e in attribute_buffer)
79
+
80
+ @property
81
+ def tile_ids(self):
82
+ return self._get_array_attribute("TILE_IDS", ENUM_TO_MATMUL_TILE)
83
+
84
+ @property
85
+ def stages_ids(self):
86
+ return self._get_array_attribute("STAGES_IDS", ENUM_TO_MATMUL_STAGE)
@@ -0,0 +1,87 @@
1
+ # Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ """
6
+ Interface class to encapsulate low-level calls to get algorithm configuration information.
7
+ """
8
+
9
+ __all__ = ["AlgoConfigInterface"]
10
+
11
+ from collections import namedtuple
12
+
13
+ import numpy as np
14
+
15
+ from nvmath.bindings import cublasLt as cublaslt
16
+ from .enum_to_tuples import (
17
+ CLUSTER_SHAPE_TO_ENUM,
18
+ ENUM_TO_CLUSTER_SHAPE,
19
+ MATMUL_STAGE_TO_ENUM,
20
+ ENUM_TO_MATMUL_STAGE,
21
+ MATMUL_TILE_TO_ENUM,
22
+ ENUM_TO_MATMUL_TILE,
23
+ )
24
+
25
+ ConfigEnum = cublaslt.MatmulAlgoConfigAttribute
26
+
27
+
28
+ def scalar_attributes():
29
+ return [e.name for e in ConfigEnum]
30
+
31
+
32
+ CAP_ENUM_SCALAR_ATTR = scalar_attributes()
33
+
34
+ # Special Handling.
35
+ Maps = namedtuple("Maps", ["to_enumerator", "to_value"])
36
+ SPECIAL_ATTR = {
37
+ "CLUSTER_SHAPE_ID": Maps(CLUSTER_SHAPE_TO_ENUM, ENUM_TO_CLUSTER_SHAPE),
38
+ "STAGES_ID": Maps(MATMUL_STAGE_TO_ENUM, ENUM_TO_MATMUL_STAGE),
39
+ "TILE_ID": Maps(MATMUL_TILE_TO_ENUM, ENUM_TO_MATMUL_TILE),
40
+ }
41
+
42
+
43
+ class AlgoConfigInterface:
44
+ def __init__(self, algorithm):
45
+ """ """
46
+ assert isinstance(algorithm, cublaslt.MatmulHeuristicResult), "Internal error."
47
+ self.algorithm = algorithm
48
+
49
+ def __getattr__(self, name):
50
+ _name = name.upper()
51
+ if _name not in CAP_ENUM_SCALAR_ATTR:
52
+ return super().__getattr__(name)
53
+ name = _name
54
+ get_dtype = cublaslt.get_matmul_algo_config_attribute_dtype
55
+ attribute_buffer = np.zeros((1,), dtype=get_dtype(ConfigEnum[name]))
56
+ size_written = np.zeros((1,), dtype=np.uint64)
57
+ cublaslt.matmul_algo_config_get_attribute(
58
+ self.algorithm["algo"].ctypes.data,
59
+ ConfigEnum[name].value,
60
+ attribute_buffer.ctypes.data,
61
+ attribute_buffer.itemsize,
62
+ size_written.ctypes.data,
63
+ )
64
+
65
+ if name not in SPECIAL_ATTR:
66
+ return attribute_buffer[0]
67
+
68
+ return SPECIAL_ATTR[name].to_value[attribute_buffer[0]]
69
+
70
+ def __setattr__(self, name, value):
71
+ _name = name.upper()
72
+ if _name not in CAP_ENUM_SCALAR_ATTR:
73
+ return super().__setattr__(name, value)
74
+ name = _name
75
+
76
+ if name in SPECIAL_ATTR:
77
+ value = SPECIAL_ATTR[name].to_enumerator[value]
78
+
79
+ get_dtype = cublaslt.get_matmul_algo_config_attribute_dtype
80
+ attribute_buffer = np.zeros((1,), dtype=get_dtype(ConfigEnum[name]))
81
+ attribute_buffer[0] = value
82
+ cublaslt.matmul_algo_config_set_attribute(
83
+ self.algorithm["algo"].ctypes.data,
84
+ ConfigEnum[name].value,
85
+ attribute_buffer.ctypes.data,
86
+ attribute_buffer.itemsize,
87
+ )
@@ -0,0 +1,64 @@
1
+ # Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ """
6
+ Utilities to convert tuple like enumerators to tuples, along with forward and inverse maps.
7
+ """
8
+
9
+ __all__ = [
10
+ "CLUSTER_SHAPES",
11
+ "CLUSTER_SHAPE_TO_ENUM",
12
+ "ENUM_TO_CLUSTER_SHAPE",
13
+ "MATMUL_STAGES",
14
+ "MATMUL_STAGE_TO_ENUM",
15
+ "ENUM_TO_MATMUL_STAGE",
16
+ "MATMUL_TILES",
17
+ "MATMUL_TILE_TO_ENUM",
18
+ "ENUM_TO_MATMUL_TILE",
19
+ ]
20
+
21
+ import re
22
+
23
+ from nvmath.bindings import cublasLt as cublaslt
24
+
25
+
26
+ def integer_or_string(value):
27
+ try:
28
+ value = int(value)
29
+ except ValueError:
30
+ ...
31
+ return value
32
+
33
+
34
+ def create_valid_tuples_from_enum(enum, prefix, *, expr=r"(?:(\d+)x(\d+|\w+)(?:x(\d+))?|(AUTO|UNDEFINED))"):
35
+ """
36
+ Create a sequence of tuples representing the allowed combinations for the given
37
+ enumeration.
38
+ """
39
+
40
+ combinations = []
41
+ enumerator_to_value = {}
42
+ value_to_enumerator = {}
43
+ expr = prefix + expr
44
+ for e in enum:
45
+ m = re.match(expr, e.name)
46
+ if m:
47
+ # print(m.groups())
48
+ if m.group(4):
49
+ v = m.group(4)
50
+ else:
51
+ groups = m.groups()[: m.groups().index(None)]
52
+ v = tuple(map(integer_or_string, (g for g in groups)))
53
+ combinations.append(v)
54
+ value_to_enumerator[v] = e
55
+ enumerator_to_value[e] = v
56
+
57
+ return tuple(combinations), value_to_enumerator, enumerator_to_value
58
+
59
+
60
+ CLUSTER_SHAPES, CLUSTER_SHAPE_TO_ENUM, ENUM_TO_CLUSTER_SHAPE = create_valid_tuples_from_enum(cublaslt.ClusterShape, "SHAPE_")
61
+
62
+ MATMUL_STAGES, MATMUL_STAGE_TO_ENUM, ENUM_TO_MATMUL_STAGE = create_valid_tuples_from_enum(cublaslt.MatmulStages, "STAGES_")
63
+
64
+ MATMUL_TILES, MATMUL_TILE_TO_ENUM, ENUM_TO_MATMUL_TILE = create_valid_tuples_from_enum(cublaslt.MatmulTile, "TILE_")