nvmath-python 0.9.0__cp314-cp314-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 (309) hide show
  1. nvmath/__init__.pxd +0 -0
  2. nvmath/__init__.py +45 -0
  3. nvmath/_internal/__init__.py +0 -0
  4. nvmath/_internal/attribute_ifc_factory.py +330 -0
  5. nvmath/_internal/layout.py +70 -0
  6. nvmath/_internal/templates.py +383 -0
  7. nvmath/_utils.py +150 -0
  8. nvmath/bindings/__init__.py +51 -0
  9. nvmath/bindings/_internal/__init__.pxd +0 -0
  10. nvmath/bindings/_internal/__init__.py +0 -0
  11. nvmath/bindings/_internal/cublas.cp314-win_amd64.pyd +0 -0
  12. nvmath/bindings/_internal/cublas.pxd +530 -0
  13. nvmath/bindings/_internal/cublasLt.cp314-win_amd64.pyd +0 -0
  14. nvmath/bindings/_internal/cublasLt.pxd +59 -0
  15. nvmath/bindings/_internal/cublasMp.pxd +52 -0
  16. nvmath/bindings/_internal/cudss.cp314-win_amd64.pyd +0 -0
  17. nvmath/bindings/_internal/cudss.pxd +47 -0
  18. nvmath/bindings/_internal/cufft.cp314-win_amd64.pyd +0 -0
  19. nvmath/bindings/_internal/cufft.pxd +70 -0
  20. nvmath/bindings/_internal/cufftMp.pxd +77 -0
  21. nvmath/bindings/_internal/curand.cp314-win_amd64.pyd +0 -0
  22. nvmath/bindings/_internal/curand.pxd +42 -0
  23. nvmath/bindings/_internal/cusolver.cp314-win_amd64.pyd +0 -0
  24. nvmath/bindings/_internal/cusolver.pxd +15 -0
  25. nvmath/bindings/_internal/cusolverDn.cp314-win_amd64.pyd +0 -0
  26. nvmath/bindings/_internal/cusolverDn.pxd +406 -0
  27. nvmath/bindings/_internal/cusparse.cp314-win_amd64.pyd +0 -0
  28. nvmath/bindings/_internal/cusparse.pxd +277 -0
  29. nvmath/bindings/_internal/cusparseLt.cp314-win_amd64.pyd +0 -0
  30. nvmath/bindings/_internal/cusparseLt.pxd +48 -0
  31. nvmath/bindings/_internal/cutensor.cp314-win_amd64.pyd +0 -0
  32. nvmath/bindings/_internal/cutensor.pxd +58 -0
  33. nvmath/bindings/_internal/mathdx.cp314-win_amd64.pyd +0 -0
  34. nvmath/bindings/_internal/mathdx.pxd +116 -0
  35. nvmath/bindings/_internal/nvshmem.pxd +29 -0
  36. nvmath/bindings/_internal/utils.cp314-win_amd64.pyd +0 -0
  37. nvmath/bindings/_internal/utils.pxd +179 -0
  38. nvmath/bindings/_internal/utils.pyi +10 -0
  39. nvmath/bindings/cublas.cp314-win_amd64.pyd +0 -0
  40. nvmath/bindings/cublas.pxd +558 -0
  41. nvmath/bindings/cublas.pyi +746 -0
  42. nvmath/bindings/cublasLt.cp314-win_amd64.pyd +0 -0
  43. nvmath/bindings/cublasLt.pxd +109 -0
  44. nvmath/bindings/cublasLt.pyi +1337 -0
  45. nvmath/bindings/cublasMp.pxd +85 -0
  46. nvmath/bindings/cublasMp.pyi +219 -0
  47. nvmath/bindings/cudss.cp314-win_amd64.pyd +0 -0
  48. nvmath/bindings/cudss.pxd +86 -0
  49. nvmath/bindings/cudss.pyi +282 -0
  50. nvmath/bindings/cufft.cp314-win_amd64.pyd +0 -0
  51. nvmath/bindings/cufft.pxd +118 -0
  52. nvmath/bindings/cufft.pyi +241 -0
  53. nvmath/bindings/cufftMp.pxd +124 -0
  54. nvmath/bindings/cufftMp.pyi +260 -0
  55. nvmath/bindings/curand.cp314-win_amd64.pyd +0 -0
  56. nvmath/bindings/curand.pxd +71 -0
  57. nvmath/bindings/curand.pyi +159 -0
  58. nvmath/bindings/cusolver.cp314-win_amd64.pyd +0 -0
  59. nvmath/bindings/cusolver.pxd +62 -0
  60. nvmath/bindings/cusolver.pyi +242 -0
  61. nvmath/bindings/cusolverDn.cp314-win_amd64.pyd +0 -0
  62. nvmath/bindings/cusolverDn.pxd +430 -0
  63. nvmath/bindings/cusolverDn.pyi +416 -0
  64. nvmath/bindings/cusparse.cp314-win_amd64.pyd +0 -0
  65. nvmath/bindings/cusparse.pxd +338 -0
  66. nvmath/bindings/cusparse.pyi +659 -0
  67. nvmath/bindings/cusparseLt.cp314-win_amd64.pyd +0 -0
  68. nvmath/bindings/cusparseLt.pxd +99 -0
  69. nvmath/bindings/cusparseLt.pyi +198 -0
  70. nvmath/bindings/cutensor.cp314-win_amd64.pyd +0 -0
  71. nvmath/bindings/cutensor.pxd +98 -0
  72. nvmath/bindings/cutensor.pyi +294 -0
  73. nvmath/bindings/cycublas.cp314-win_amd64.pyd +0 -0
  74. nvmath/bindings/cycublas.pxd +684 -0
  75. nvmath/bindings/cycublasLt.cp314-win_amd64.pyd +0 -0
  76. nvmath/bindings/cycublasLt.pxd +1055 -0
  77. nvmath/bindings/cycublasMp.pxd +183 -0
  78. nvmath/bindings/cycudss.cp314-win_amd64.pyd +0 -0
  79. nvmath/bindings/cycudss.pxd +224 -0
  80. nvmath/bindings/cycufft.cp314-win_amd64.pyd +0 -0
  81. nvmath/bindings/cycufft.pxd +326 -0
  82. nvmath/bindings/cycufftMp.pxd +334 -0
  83. nvmath/bindings/cycurand.cp314-win_amd64.pyd +0 -0
  84. nvmath/bindings/cycurand.pxd +146 -0
  85. nvmath/bindings/cycusolver.cp314-win_amd64.pyd +0 -0
  86. nvmath/bindings/cycusolver.pxd +154 -0
  87. nvmath/bindings/cycusolverDn.cp314-win_amd64.pyd +0 -0
  88. nvmath/bindings/cycusolverDn.pxd +446 -0
  89. nvmath/bindings/cycusparse.cp314-win_amd64.pyd +0 -0
  90. nvmath/bindings/cycusparse.pxd +470 -0
  91. nvmath/bindings/cycusparseLt.cp314-win_amd64.pyd +0 -0
  92. nvmath/bindings/cycusparseLt.pxd +150 -0
  93. nvmath/bindings/cycutensor.cp314-win_amd64.pyd +0 -0
  94. nvmath/bindings/cycutensor.pxd +192 -0
  95. nvmath/bindings/cymathdx.cp314-win_amd64.pyd +0 -0
  96. nvmath/bindings/cymathdx.pxd +552 -0
  97. nvmath/bindings/cynvshmem.pxd +126 -0
  98. nvmath/bindings/mathdx.cp314-win_amd64.pyd +0 -0
  99. nvmath/bindings/mathdx.pxd +182 -0
  100. nvmath/bindings/mathdx.pyi +1244 -0
  101. nvmath/bindings/nvpl/__init__.pxd +0 -0
  102. nvmath/bindings/nvpl/__init__.py +13 -0
  103. nvmath/bindings/nvpl/_internal/__init__.pxd +0 -0
  104. nvmath/bindings/nvpl/_internal/__init__.py +0 -0
  105. nvmath/bindings/nvpl/_internal/blas.cp314-win_amd64.pyd +0 -0
  106. nvmath/bindings/nvpl/_internal/blas.pxd +125 -0
  107. nvmath/bindings/nvpl/_internal/fft.cp314-win_amd64.pyd +0 -0
  108. nvmath/bindings/nvpl/_internal/fft.pxd +36 -0
  109. nvmath/bindings/nvpl/blas.cp314-win_amd64.pyd +0 -0
  110. nvmath/bindings/nvpl/blas.pxd +85 -0
  111. nvmath/bindings/nvpl/blas.pyi +122 -0
  112. nvmath/bindings/nvpl/cyblas.cp314-win_amd64.pyd +0 -0
  113. nvmath/bindings/nvpl/cyblas.pxd +166 -0
  114. nvmath/bindings/nvpl/cyfft.cp314-win_amd64.pyd +0 -0
  115. nvmath/bindings/nvpl/cyfft.pxd +92 -0
  116. nvmath/bindings/nvpl/fft.cp314-win_amd64.pyd +0 -0
  117. nvmath/bindings/nvpl/fft.pxd +100 -0
  118. nvmath/bindings/nvpl/fft.pyi +100 -0
  119. nvmath/bindings/nvshmem.pxd +54 -0
  120. nvmath/bindings/nvshmem.pyi +179 -0
  121. nvmath/device/__init__.py +21 -0
  122. nvmath/device/_deprecated.py +33 -0
  123. nvmath/device/common.py +313 -0
  124. nvmath/device/common_backend.py +131 -0
  125. nvmath/device/common_cuda.py +201 -0
  126. nvmath/device/common_numba.py +310 -0
  127. nvmath/device/common_opaque_tensor.py +201 -0
  128. nvmath/device/cublasdx.py +1805 -0
  129. nvmath/device/cublasdx_backend.py +807 -0
  130. nvmath/device/cublasdx_numba.py +1612 -0
  131. nvmath/device/cufftdx.py +510 -0
  132. nvmath/device/cufftdx_backend.py +196 -0
  133. nvmath/device/cufftdx_numba.py +196 -0
  134. nvmath/device/curand_kernel.py +9147 -0
  135. nvmath/device/cusolverdx.py +2690 -0
  136. nvmath/device/cusolverdx_backend.py +440 -0
  137. nvmath/device/cusolverdx_numba.py +1624 -0
  138. nvmath/device/llvm_array.py +29 -0
  139. nvmath/device/random.py +445 -0
  140. nvmath/device/random_helpers.py +23 -0
  141. nvmath/device/random_states.py +187 -0
  142. nvmath/device/types.py +147 -0
  143. nvmath/device/vector_types_numba.py +203 -0
  144. nvmath/distributed/__init__.py +205 -0
  145. nvmath/distributed/_internal/__init__.py +0 -0
  146. nvmath/distributed/_internal/nvshmem.py +302 -0
  147. nvmath/distributed/_internal/tensor_ifc.py +67 -0
  148. nvmath/distributed/_internal/tensor_ifc_cupy.py +62 -0
  149. nvmath/distributed/_internal/tensor_ifc_host_device.py +165 -0
  150. nvmath/distributed/_internal/tensor_ifc_numpy.py +41 -0
  151. nvmath/distributed/_internal/tensor_ifc_torch.py +141 -0
  152. nvmath/distributed/_internal/tensor_wrapper.py +78 -0
  153. nvmath/distributed/_utils.py +167 -0
  154. nvmath/distributed/distribution.py +770 -0
  155. nvmath/distributed/fft/__init__.py +7 -0
  156. nvmath/distributed/fft/_configuration.py +79 -0
  157. nvmath/distributed/fft/fft.py +2801 -0
  158. nvmath/distributed/linalg/__init__.py +12 -0
  159. nvmath/distributed/linalg/_internal/__init__.py +3 -0
  160. nvmath/distributed/linalg/_internal/epilog_protocol.py +496 -0
  161. nvmath/distributed/linalg/_internal/matmul_desc_ifc.py +28 -0
  162. nvmath/distributed/linalg/advanced/__init__.py +8 -0
  163. nvmath/distributed/linalg/advanced/_configuration.py +166 -0
  164. nvmath/distributed/linalg/advanced/matmulmod.py +2908 -0
  165. nvmath/distributed/process_group.py +408 -0
  166. nvmath/distributed/reshape/__init__.py +6 -0
  167. nvmath/distributed/reshape/_configuration.py +39 -0
  168. nvmath/distributed/reshape/reshape.py +1256 -0
  169. nvmath/fft/__init__.py +7 -0
  170. nvmath/fft/_configuration.py +208 -0
  171. nvmath/fft/_exec_utils.py +109 -0
  172. nvmath/fft/_helpers.py +237 -0
  173. nvmath/fft/fft.py +2903 -0
  174. nvmath/internal/__init__.pxd +3 -0
  175. nvmath/internal/__init__.py +10 -0
  176. nvmath/internal/_bindings.cp314-win_amd64.pyd +0 -0
  177. nvmath/internal/_bindings.pxd +12 -0
  178. nvmath/internal/_device_utils.py +54 -0
  179. nvmath/internal/enum_utils.py +142 -0
  180. nvmath/internal/formatters.py +87 -0
  181. nvmath/internal/mem_limit.py +51 -0
  182. nvmath/internal/memory.cp314-win_amd64.pyd +0 -0
  183. nvmath/internal/memory.pxd +10 -0
  184. nvmath/internal/memory.pyi +46 -0
  185. nvmath/internal/ndbuffer/__init__.pxd +3 -0
  186. nvmath/internal/ndbuffer/__init__.py +7 -0
  187. nvmath/internal/ndbuffer/copy_kernel/args.h +34 -0
  188. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/array_view.h +52 -0
  189. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/elementwise.h +68 -0
  190. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/grid_indexer.h +69 -0
  191. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/transposed.h +240 -0
  192. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/type_utils.h +39 -0
  193. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/utils.h +132 -0
  194. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/vec.h +159 -0
  195. nvmath/internal/ndbuffer/copy_kernel/elementwise.h +53 -0
  196. nvmath/internal/ndbuffer/copy_kernel/transposed.h +58 -0
  197. nvmath/internal/ndbuffer/copy_kernel.cp314-win_amd64.pyd +0 -0
  198. nvmath/internal/ndbuffer/copy_kernel.pxd +9 -0
  199. nvmath/internal/ndbuffer/copy_kernel.pyi +9 -0
  200. nvmath/internal/ndbuffer/data_layout.cp314-win_amd64.pyd +0 -0
  201. nvmath/internal/ndbuffer/data_layout.pxd +72 -0
  202. nvmath/internal/ndbuffer/data_layout.pyi +23 -0
  203. nvmath/internal/ndbuffer/jit.cp314-win_amd64.pyd +0 -0
  204. nvmath/internal/ndbuffer/jit.pxd +7 -0
  205. nvmath/internal/ndbuffer/jit.pyi +6 -0
  206. nvmath/internal/ndbuffer/ndbuffer.cp314-win_amd64.pyd +0 -0
  207. nvmath/internal/ndbuffer/ndbuffer.pxd +36 -0
  208. nvmath/internal/ndbuffer/ndbuffer.pyi +41 -0
  209. nvmath/internal/ndbuffer/package_utils.cp314-win_amd64.pyd +0 -0
  210. nvmath/internal/ndbuffer/package_utils.pxd +11 -0
  211. nvmath/internal/ndbuffer/package_utils.pyi +12 -0
  212. nvmath/internal/package_ifc.py +147 -0
  213. nvmath/internal/package_ifc_cuda.py +49 -0
  214. nvmath/internal/package_ifc_cupy.py +49 -0
  215. nvmath/internal/package_ifc_torch.py +31 -0
  216. nvmath/internal/package_wrapper.py +14 -0
  217. nvmath/internal/tensor_ifc.py +194 -0
  218. nvmath/internal/tensor_ifc_cupy.py +241 -0
  219. nvmath/internal/tensor_ifc_ndbuffer.py +153 -0
  220. nvmath/internal/tensor_ifc_numpy.py +183 -0
  221. nvmath/internal/tensor_ifc_torch.py +176 -0
  222. nvmath/internal/tensor_wrapper.py +157 -0
  223. nvmath/internal/typemaps.py +162 -0
  224. nvmath/internal/utils.py +771 -0
  225. nvmath/linalg/__init__.py +46 -0
  226. nvmath/linalg/_internal/__init__.py +3 -0
  227. nvmath/linalg/_internal/algo_cap_ifc.py +82 -0
  228. nvmath/linalg/_internal/algo_config_ifc.py +43 -0
  229. nvmath/linalg/_internal/batch.py +217 -0
  230. nvmath/linalg/_internal/enum_to_tuples.py +64 -0
  231. nvmath/linalg/_internal/epilog_protocol.py +766 -0
  232. nvmath/linalg/_internal/layout.py +624 -0
  233. nvmath/linalg/_internal/matmul_desc_ifc.py +28 -0
  234. nvmath/linalg/_internal/matmul_pref_ifc.py +27 -0
  235. nvmath/linalg/_internal/matrix_layout_ifc.py +26 -0
  236. nvmath/linalg/_internal/typemaps.py +144 -0
  237. nvmath/linalg/_internal/utils.py +134 -0
  238. nvmath/linalg/advanced/__init__.py +8 -0
  239. nvmath/linalg/advanced/_algorithmmod.py +149 -0
  240. nvmath/linalg/advanced/_configuration.py +349 -0
  241. nvmath/linalg/advanced/helpers/__init__.py +5 -0
  242. nvmath/linalg/advanced/helpers/matmul.py +1348 -0
  243. nvmath/linalg/advanced/matmulmod.py +3937 -0
  244. nvmath/linalg/generic/__init__.py +43 -0
  245. nvmath/linalg/generic/_configuration/__init__.py +37 -0
  246. nvmath/linalg/generic/_configuration/layout.py +263 -0
  247. nvmath/linalg/generic/_configuration/match.py +609 -0
  248. nvmath/linalg/generic/_configuration/qualifiers.py +494 -0
  249. nvmath/linalg/generic/_configuration/wrap.py +217 -0
  250. nvmath/linalg/generic/_dtype.py +15 -0
  251. nvmath/linalg/generic/matmulmod.py +1060 -0
  252. nvmath/memory.py +282 -0
  253. nvmath/sparse/__init__.py +38 -0
  254. nvmath/sparse/_internal/__init__.py +21 -0
  255. nvmath/sparse/_internal/common_utils.py +144 -0
  256. nvmath/sparse/_internal/cudss_config_ifc.py +741 -0
  257. nvmath/sparse/_internal/cudss_data_ifc.py +399 -0
  258. nvmath/sparse/_internal/cudss_utils.py +445 -0
  259. nvmath/sparse/_internal/cusparse_utils.py +382 -0
  260. nvmath/sparse/_internal/sparse_bsc_ifc.py +300 -0
  261. nvmath/sparse/_internal/sparse_bsr_ifc.py +303 -0
  262. nvmath/sparse/_internal/sparse_coo_ifc.py +254 -0
  263. nvmath/sparse/_internal/sparse_csc_ifc.py +266 -0
  264. nvmath/sparse/_internal/sparse_csr_ifc.py +266 -0
  265. nvmath/sparse/_internal/sparse_dia_ifc.py +239 -0
  266. nvmath/sparse/_internal/sparse_format_helpers.py +601 -0
  267. nvmath/sparse/_internal/sparse_tensor_ifc.py +121 -0
  268. nvmath/sparse/_internal/sparse_ust_ifc.py +146 -0
  269. nvmath/sparse/_internal/utils.py +56 -0
  270. nvmath/sparse/advanced/__init__.py +7 -0
  271. nvmath/sparse/advanced/_configuration.py +230 -0
  272. nvmath/sparse/advanced/direct_solver.py +1884 -0
  273. nvmath/sparse/generic/__init__.py +7 -0
  274. nvmath/sparse/generic/_configuration.py +129 -0
  275. nvmath/sparse/generic/_helpers.py +137 -0
  276. nvmath/sparse/generic/_thunks.py +21 -0
  277. nvmath/sparse/generic/matmulmod.py +2426 -0
  278. nvmath/sparse/ust/__init__.py +7 -0
  279. nvmath/sparse/ust/_converters.py +378 -0
  280. nvmath/sparse/ust/_drawer.py +552 -0
  281. nvmath/sparse/ust/_emitter.py +553 -0
  282. nvmath/sparse/ust/_jit.py +212 -0
  283. nvmath/sparse/ust/_kernel.py +346 -0
  284. nvmath/sparse/ust/_semiring.py +71 -0
  285. nvmath/sparse/ust/_utils.py +102 -0
  286. nvmath/sparse/ust/interfaces/__init__.py +0 -0
  287. nvmath/sparse/ust/interfaces/torch_interface.py +476 -0
  288. nvmath/sparse/ust/semiring_ops.py +71 -0
  289. nvmath/sparse/ust/tensor.py +1027 -0
  290. nvmath/sparse/ust/tensor_drawer.py +552 -0
  291. nvmath/sparse/ust/tensor_emitter.py +558 -0
  292. nvmath/sparse/ust/tensor_format.py +935 -0
  293. nvmath/sparse/ust/tensor_jit.py +212 -0
  294. nvmath/sparse/ust/tensor_kernel.py +348 -0
  295. nvmath/sparse/ust/tensor_utils.py +380 -0
  296. nvmath/tensor/__init__.py +6 -0
  297. nvmath/tensor/_configuration.py +95 -0
  298. nvmath/tensor/_internal/__init__.py +3 -0
  299. nvmath/tensor/_internal/cutensor_config_ifc.py +247 -0
  300. nvmath/tensor/_internal/cutensor_utils.py +162 -0
  301. nvmath/tensor/_internal/data.py +43 -0
  302. nvmath/tensor/_internal/einsum_parser.py +444 -0
  303. nvmath/tensor/_internal/typemaps.py +96 -0
  304. nvmath/tensor/contract.py +1861 -0
  305. nvmath_python-0.9.0.dist-info/METADATA +127 -0
  306. nvmath_python-0.9.0.dist-info/RECORD +309 -0
  307. nvmath_python-0.9.0.dist-info/WHEEL +5 -0
  308. nvmath_python-0.9.0.dist-info/licenses/LICENSE +177 -0
  309. nvmath_python-0.9.0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,349 @@
1
+ # Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ __all__ = [
6
+ "MatmulEpilog",
7
+ "MatmulInnerShape",
8
+ "MatmulNumericalImplFlags",
9
+ "MatmulOptions",
10
+ "MatmulEpilogPreferences",
11
+ "MatmulPlanPreferences",
12
+ "MatmulQuantizationScales",
13
+ "MatmulReductionScheme",
14
+ "matrix_qualifiers_dtype",
15
+ ]
16
+
17
+ import dataclasses
18
+ from enum import IntEnum
19
+ from logging import Logger
20
+ from typing import Literal
21
+
22
+ import numpy as _np
23
+
24
+ from nvmath._utils import CudaDataType
25
+ from nvmath.bindings import cublas # type: ignore
26
+ from nvmath.bindings import cublasLt as cublaslt # type: ignore
27
+ from nvmath.internal import enum_utils
28
+ from nvmath.internal.mem_limit import check_memory_str
29
+ from nvmath.internal.tensor_ifc import AnyTensor
30
+ from nvmath.internal.utils import check_or_create_options
31
+ from nvmath.memory import BaseCUDAMemoryManager, BaseCUDAMemoryManagerAsync
32
+
33
+ MatmulEpilog = cublaslt.Epilogue
34
+ MatmulInnerShape = cublaslt.MatmulInnerShape
35
+ MatmulReductionScheme = cublaslt.ReductionScheme
36
+
37
+
38
+ @dataclasses.dataclass
39
+ class MatmulOptions:
40
+ """A data class for providing options to the :class:`Matmul` object and the wrapper
41
+ function :func:`matmul`.
42
+
43
+ Attributes:
44
+ inplace: Whether the matrix multiplication is performed in-place (operand C is
45
+ overwritten); ``inplace=True`` implies that operand C cannot be broadcast (in
46
+ the batch as well as the N-dimension) since it must be large enough to
47
+ hold the result of the computation. The default is ``inplace=False``.
48
+
49
+ compute_type (nvmath.linalg.ComputeType): CUDA compute type. A suitable compute type
50
+ will be selected if not specified.
51
+
52
+ scale_type (nvmath.CudaDataType): CUDA data type. A suitable data type consistent
53
+ with the compute type will be selected if not specified.
54
+
55
+ result_type (nvmath.CudaDataType): CUDA data type. A requested datatype of the
56
+ result. If not specified, this type will be determined based on the input types.
57
+ Non-default result types are only supported for narrow-precision (FP8 and lower)
58
+ operations.
59
+
60
+ result_amax (bool): If set, the absolute maximum (amax) of the result will be
61
+ returned in the auxiliary output tensor. Only supported for narrow-precision
62
+ (FP8 and lower) operations.
63
+
64
+ block_scaling (bool): If set, block scaling (MXFP8) will be used instead of
65
+ tensor-wide scaling for FP8 operations. If the result is a narrow-precision
66
+ (FP8 and lower) data type, scales used for result quantization will be returned
67
+ in the auxiliary output tensor as ``"d_out_scale"`` in UE8M0 format. For more
68
+ information on UE8M0 format, see the documentation of
69
+ :class:`~nvmath.linalg.advanced.MatmulQuantizationScales`.
70
+ This option is only supported for narrow-precision (FP8 and lower) operations.
71
+
72
+ sm_count_target (int) : The number of SMs to use for execution. The default is 0,
73
+ corresponding to all available SMs.
74
+
75
+ fast_accumulation (bool) : Enable or disable FP8 fast accumulation mode. The default
76
+ is False (disabled).
77
+
78
+ device_id: CUDA device ordinal (only used if the operand resides on the CPU). The
79
+ default value is 0.
80
+
81
+ handle: Linear algebra library handle. A handle will be created if one is not
82
+ provided.
83
+
84
+ logger (logging.Logger): Python Logger object. The root logger will be used if a
85
+ logger object is not provided.
86
+
87
+ memory_limit: Maximum memory available to the MM operation. It can be specified as a
88
+ value (with optional suffix like K[iB], M[iB], G[iB]) or as a percentage. The
89
+ default is 80% of the device memory.
90
+
91
+ blocking: A flag specifying the behavior of the execution functions and methods,
92
+ such as :func:`matmul` and :meth:`Matmul.execute`. When ``blocking`` is `True`,
93
+ the execution methods do not return until the operation is complete. When
94
+ ``blocking`` is ``"auto"``, the methods return immediately when the inputs are
95
+ on the GPU. The execution methods always block when the operands are on the CPU
96
+ to ensure that the user doesn't inadvertently use the result before it becomes
97
+ available. The default is ``"auto"``.
98
+
99
+ allocator: An object that supports the :class:`BaseCUDAMemoryManager` protocol, used
100
+ to draw device memory. If an allocator is not provided, a memory allocator from
101
+ the library package will be used (:func:`torch.cuda.caching_allocator_alloc` for
102
+ PyTorch operands, :func:`cupy.cuda.alloc` otherwise).
103
+
104
+ .. seealso::
105
+ :class:`Matmul`, :func:`matmul`
106
+ """
107
+
108
+ inplace: bool = False
109
+ compute_type: int | None = None
110
+ scale_type: int | None = None
111
+ result_type: int | None = None
112
+ result_amax: bool = False
113
+ block_scaling: bool = False
114
+ sm_count_target: int | None = 0
115
+ fast_accumulation: bool | None = False
116
+ device_id: int = 0
117
+ handle: int | None = None
118
+ logger: Logger | None = None
119
+ memory_limit: int | str | None = r"80%"
120
+ blocking: Literal[True, "auto"] = "auto"
121
+ allocator: BaseCUDAMemoryManager | None = None
122
+
123
+ def __post_init__(self):
124
+ # Defer computing the memory limit till we know the device the network is on.
125
+
126
+ if self.compute_type is not None:
127
+ self.compute_type = cublas.ComputeType(self.compute_type)
128
+
129
+ if self.scale_type is not None:
130
+ self.scale_type = CudaDataType(self.scale_type)
131
+
132
+ if self.sm_count_target is None:
133
+ self.sm_count_target = MatmulOptions.sm_count_target
134
+
135
+ if self.fast_accumulation is None:
136
+ self.fast_accumulation = MatmulOptions.fast_accumulation
137
+
138
+ if self.device_id is None:
139
+ self.device_id = 0
140
+
141
+ if self.memory_limit is None:
142
+ self.memory_limit = MatmulOptions.memory_limit
143
+
144
+ check_memory_str(self.memory_limit, "memory limit")
145
+
146
+ if self.blocking not in (True, "auto"):
147
+ raise ValueError("The value specified for blocking must be either True or 'auto'.")
148
+
149
+ if self.allocator is not None and not isinstance(self.allocator, BaseCUDAMemoryManager | BaseCUDAMemoryManagerAsync):
150
+ raise TypeError("The allocator must be an object of type that fulfills the BaseCUDAMemoryManager protocol.")
151
+
152
+
153
+ matrix_qualifiers_dtype = _np.dtype([("structure", object), ("is_conjugate", "<i4")])
154
+
155
+
156
+ class MatmulNumericalImplFlags(IntEnum):
157
+ """
158
+ These flags can be combined with the | operator: OP_TYPE_FMA | OP_TYPE_TENSOR_HMMA ...
159
+ """
160
+
161
+ OP_TYPE_FMA = 0x01 << 0
162
+ OP_TYPE_TENSOR_HMMA = 0x02 << 0
163
+ OP_TYPE_TENSOR_IMMA = 0x04 << 0
164
+ OP_TYPE_TENSOR_DMMA = 0x08 << 0
165
+ OP_TYPE_TENSOR_MASK = 0xFE << 0
166
+ OP_TYPE_MASK = 0xFF << 0
167
+
168
+ ACCUMULATOR_16F = 0x01 << 8
169
+ ACCUMULATOR_32F = 0x02 << 8
170
+ ACCUMULATOR_64F = 0x04 << 8
171
+ ACCUMULATOR_32I = 0x08 << 8
172
+ ACCUMULATOR_TYPE_MASK = 0xFF << 8
173
+
174
+ INPUT_TYPE_16F = 0x01 << 16
175
+ INPUT_TYPE_16BF = 0x02 << 16
176
+ INPUT_TYPE_TF32 = 0x04 << 16
177
+ INPUT_TYPE_32F = 0x08 << 16
178
+ INPUT_TYPE_64F = 0x10 << 16
179
+ INPUT_TYPE_8I = 0x20 << 16
180
+ INPUT_TYPE_8F_E4M3 = 0x40 << 16
181
+ INPUT_TYPE_8F_E5M2 = 0x80 << 16
182
+ INPUT_TYPE_MASK = 0xFF << 16
183
+
184
+ GAUSSIAN = 0x01 << 32
185
+
186
+ ALL = (1 << 64) - 1
187
+
188
+
189
+ @dataclasses.dataclass
190
+ class MatmulEpilogPreferences:
191
+ """A data class for providing epilog options as part of ``preferences`` to the
192
+ :meth:`Matmul.plan` method and the wrapper function :func:`matmul`.
193
+
194
+ Attributes:
195
+ aux_type (nvmath.CudaDataType): The requested datatype of the
196
+ epilog auxiliary output. If not specified, this type will be determined based on
197
+ the input types. Non-default auxiliary output types are only supported for
198
+ narrow-precision operations and certain epilogs. For more details on the
199
+ supported combinations, see ``CUBLASLT_MATMUL_DESC_EPILOGUE_AUX_DATA_TYPE`` in
200
+ cuBLAS documentation. If this option is set to a narrow-precision data type,
201
+ an additional epilog input ``"aux_quantization_scale"`` needs to be specified.
202
+
203
+ aux_amax (bool): If set, the absolute maximum (amax) of the epilog
204
+ auxiliary output will be returned in the auxiliary output tensor.
205
+ Only supported when ``aux_type`` option is set to a narrow-precision
206
+ data type.
207
+
208
+ .. seealso::
209
+ :meth:`Matmul.plan`, :func:`matmul`, :class:`MatmulPlanPreferences`
210
+ """
211
+
212
+ aux_type: int | None = None
213
+ aux_amax: bool = False
214
+
215
+
216
+ @dataclasses.dataclass
217
+ class MatmulPlanPreferences:
218
+ """A data class for providing options to the :meth:`Matmul.plan` method and the
219
+ wrapper function :func:`matmul`.
220
+
221
+ Attributes:
222
+ reduction_scheme_mask (:class:`nvmath.linalg.advanced.MatmulReductionScheme`):
223
+ Enumerators from
224
+ :class:`nvmath.linalg.advanced.MatmulReductionScheme` combined with
225
+ bitwise operator ``|``. The default is all reduction schemes.
226
+
227
+ max_waves_count (float) : The maximum wave count. Selecting a value greater than 0.
228
+ will exclude algorithms with device utilization greater than specified. The
229
+ default is 0.
230
+
231
+ numerical_impl_mask (:class:`nvmath.linalg.advanced.MatmulNumericalImplFlags`):
232
+ Enumerators from
233
+ :class:`nvmath.linalg.advanced.MatmulNumericalImplFlags` combined with
234
+ bitwise operator ``|``. The default is all numerical implementation flag
235
+ choices.
236
+
237
+ limit (int) : The number of algorithms to consider. If not specified, a suitable
238
+ default will be chosen.
239
+
240
+ epilog (:class:`nvmath.linalg.advanced.MatmulEpilogPreferences`):
241
+ Epilog preferences (as an object of class
242
+ :class:`~nvmath.linalg.advanced.MatmulEpilogPreferences` or a `dict`).
243
+
244
+ .. seealso::
245
+ :meth:`Matmul.plan`, :func:`matmul`
246
+ """
247
+
248
+ reduction_scheme_mask: cublaslt.ReductionScheme | None = cublaslt.ReductionScheme.MASK
249
+ max_waves_count: float | None = 0.0
250
+ numerical_impl_mask: MatmulNumericalImplFlags | None = MatmulNumericalImplFlags.ALL
251
+ limit: int = 8
252
+ epilog: MatmulEpilogPreferences | None = None
253
+
254
+ def __post_init__(self):
255
+ if self.reduction_scheme_mask is None:
256
+ self.reduction_scheme_mask = MatmulPlanPreferences.reduction_scheme_mask
257
+ else:
258
+ self.reduction_scheme_mask = cublaslt.ReductionScheme(self.reduction_scheme_mask)
259
+
260
+ if self.max_waves_count is None:
261
+ self.max_waves_count = MatmulPlanPreferences.max_waves_count
262
+
263
+ if self.numerical_impl_mask is None:
264
+ self.numerical_impl_mask = MatmulPlanPreferences.numerical_impl_mask
265
+
266
+ if self.limit is None:
267
+ self.limit = MatmulPlanPreferences.limit
268
+
269
+ self.epilog = check_or_create_options(MatmulEpilogPreferences, self.epilog, "epilog preferences")
270
+
271
+
272
+ @dataclasses.dataclass
273
+ class MatmulQuantizationScales:
274
+ """A data class for providing quantization_scales to :class:`Matmul` constructor and the
275
+ wrapper function :func:`matmul`.
276
+
277
+ Scales can only be set for narrow-precision (FP8 and lower) matrices.
278
+
279
+ **FP8 operations** (``block_scaling=False``, per-tensor scaling):
280
+
281
+ * Scale format: **scalar** (integer or float) or single-element tensor
282
+ of shape ``()`` or ``(1,)``
283
+ * A single scale value is applied to the entire tensor.
284
+
285
+ **MXFP8 operations** (``block_scaling=True``, microscaling with FP8 operands):
286
+
287
+ * Scale format: **1D tensor** with layout matching cuBLAS MXFP8 requirements
288
+ * Scale dtype: ``uint8`` (interpreted as UE8M0 values by cuBLAS)
289
+ * A scale value :math:`x` causes cuBLAS to multiply the respective
290
+ block by :math:`2^{x-127}`.
291
+
292
+ **NVFP4 operations** (``block_scaling=True``, block scaling with FP4 operands):
293
+
294
+ * Scale format: **1D tensor** with layout matching cuBLAS NVFP4 requirements
295
+ * Scale dtype: ``float8_e4m3fn`` (interpreted by cuBLAS as unsigned UE4M3 values,
296
+ i.e. the bit sign is ignored).
297
+ * FP4 only supports block scaling; ``block_scaling=False`` is not supported for FP4.
298
+
299
+ .. note::
300
+ MXFP8 and NVFP4 use "block scaling" where each block of elements has its own
301
+ scale factor, as opposed to FP8 which uses a single per-tensor scale.
302
+ When ``block_scaling=True``, tensor scales are required; scalar
303
+ scales are not allowed.
304
+
305
+ .. note::
306
+ When scales are provided as tensors, they must be from the same package
307
+ and on the same memory space (CPU or GPU device) as the operands of the matmul.
308
+
309
+ Attributes:
310
+ a (int, float, or Tensor) : Scale for matrix A.
311
+
312
+ b (int, float, or Tensor) : Scale for matrix B.
313
+
314
+ c (int, float, or Tensor) : Scale for matrix C.
315
+
316
+ d (int, float, or Tensor) : Scale for matrix D.
317
+
318
+ .. seealso::
319
+ :class:`Matmul`, :func:`matmul`
320
+ """
321
+
322
+ a: int | float | AnyTensor | None = None
323
+ b: int | float | AnyTensor | None = None
324
+ c: int | float | AnyTensor | None = None
325
+ d: int | float | AnyTensor | None = None
326
+
327
+
328
+ _create_options = enum_utils.create_options_class_from_enum
329
+ _algo_cap_enum = cublaslt.MatmulAlgoCapAttribute
330
+ _get_dtype = cublaslt.get_matmul_algo_cap_attribute_dtype
331
+
332
+ AlgorithmCapabilities = _create_options(
333
+ "AlgorithmCapabilities", _algo_cap_enum, _get_dtype, "algorithm capabilities", "(?P<option_name>.*)"
334
+ )
335
+
336
+
337
+ def algorithm_capabilities_str(self):
338
+ names = [field.name for field in dataclasses.fields(self)]
339
+ width = max(len(n) for n in names)
340
+ s = """Algorithm Capabilities (refer to `MatmulAlgoCapAttribute` for documentation):
341
+ """
342
+ for name in names:
343
+ s += f" {name:{width}} = {getattr(self, name)}\n"
344
+ return s
345
+
346
+
347
+ AlgorithmCapabilities.__str__ = algorithm_capabilities_str
348
+
349
+ del _create_options, _algo_cap_enum, _get_dtype
@@ -0,0 +1,5 @@
1
+ # Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from . import matmul as matmul # noqa: F403