nvmath-python 1.0.0__cp314-cp314t-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 (332) 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 +130 -0
  7. nvmath/_internal/threadsafe.py +106 -0
  8. nvmath/_internal/utils.py +43 -0
  9. nvmath/_internal/workspace.py +490 -0
  10. nvmath/_utils.py +147 -0
  11. nvmath/bindings/__init__.py +60 -0
  12. nvmath/bindings/_internal/__init__.pxd +0 -0
  13. nvmath/bindings/_internal/__init__.py +0 -0
  14. nvmath/bindings/_internal/common_types.pxd +31 -0
  15. nvmath/bindings/_internal/cublas.cp314t-win_amd64.pyd +0 -0
  16. nvmath/bindings/_internal/cublas.pxd +530 -0
  17. nvmath/bindings/_internal/cublasLt.cp314t-win_amd64.pyd +0 -0
  18. nvmath/bindings/_internal/cublasLt.pxd +59 -0
  19. nvmath/bindings/_internal/cublasMp.pxd +52 -0
  20. nvmath/bindings/_internal/cudss.cp314t-win_amd64.pyd +0 -0
  21. nvmath/bindings/_internal/cudss.pxd +54 -0
  22. nvmath/bindings/_internal/cufft.cp314t-win_amd64.pyd +0 -0
  23. nvmath/bindings/_internal/cufft.pxd +70 -0
  24. nvmath/bindings/_internal/cufftMp.pxd +77 -0
  25. nvmath/bindings/_internal/curand.cp314t-win_amd64.pyd +0 -0
  26. nvmath/bindings/_internal/curand.pxd +42 -0
  27. nvmath/bindings/_internal/cusolver.cp314t-win_amd64.pyd +0 -0
  28. nvmath/bindings/_internal/cusolver.pxd +15 -0
  29. nvmath/bindings/_internal/cusolverDn.cp314t-win_amd64.pyd +0 -0
  30. nvmath/bindings/_internal/cusolverDn.pxd +406 -0
  31. nvmath/bindings/_internal/cusolverMp.pxd +71 -0
  32. nvmath/bindings/_internal/cusolverSp.cp314t-win_amd64.pyd +0 -0
  33. nvmath/bindings/_internal/cusolverSp.pxd +75 -0
  34. nvmath/bindings/_internal/cusparse.cp314t-win_amd64.pyd +0 -0
  35. nvmath/bindings/_internal/cusparse.pxd +471 -0
  36. nvmath/bindings/_internal/cusparseLt.cp314t-win_amd64.pyd +0 -0
  37. nvmath/bindings/_internal/cusparseLt.pxd +48 -0
  38. nvmath/bindings/_internal/cutensor.cp314t-win_amd64.pyd +0 -0
  39. nvmath/bindings/_internal/cutensor.pxd +58 -0
  40. nvmath/bindings/_internal/mathdx.cp314t-win_amd64.pyd +0 -0
  41. nvmath/bindings/_internal/mathdx.pxd +116 -0
  42. nvmath/bindings/_internal/nvshmem.pxd +29 -0
  43. nvmath/bindings/_internal/utils.cp314t-win_amd64.pyd +0 -0
  44. nvmath/bindings/_internal/utils.pxd +174 -0
  45. nvmath/bindings/_internal/utils.pyi +10 -0
  46. nvmath/bindings/cublas.cp314t-win_amd64.pyd +0 -0
  47. nvmath/bindings/cublas.pxd +558 -0
  48. nvmath/bindings/cublas.pyi +812 -0
  49. nvmath/bindings/cublasLt.cp314t-win_amd64.pyd +0 -0
  50. nvmath/bindings/cublasLt.pxd +109 -0
  51. nvmath/bindings/cublasLt.pyi +1461 -0
  52. nvmath/bindings/cublasMp.pxd +85 -0
  53. nvmath/bindings/cublasMp.pyi +267 -0
  54. nvmath/bindings/cudss.cp314t-win_amd64.pyd +0 -0
  55. nvmath/bindings/cudss.pxd +98 -0
  56. nvmath/bindings/cudss.pyi +443 -0
  57. nvmath/bindings/cufft.cp314t-win_amd64.pyd +0 -0
  58. nvmath/bindings/cufft.pxd +118 -0
  59. nvmath/bindings/cufft.pyi +301 -0
  60. nvmath/bindings/cufftMp.pxd +124 -0
  61. nvmath/bindings/cufftMp.pyi +326 -0
  62. nvmath/bindings/curand.cp314t-win_amd64.pyd +0 -0
  63. nvmath/bindings/curand.pxd +71 -0
  64. nvmath/bindings/curand.pyi +189 -0
  65. nvmath/bindings/cusolver.cp314t-win_amd64.pyd +0 -0
  66. nvmath/bindings/cusolver.pxd +62 -0
  67. nvmath/bindings/cusolver.pyi +320 -0
  68. nvmath/bindings/cusolverDn.cp314t-win_amd64.pyd +0 -0
  69. nvmath/bindings/cusolverDn.pxd +430 -0
  70. nvmath/bindings/cusolverDn.pyi +422 -0
  71. nvmath/bindings/cusolverMp.pxd +98 -0
  72. nvmath/bindings/cusolverMp.pyi +114 -0
  73. nvmath/bindings/cusolverSp.cp314t-win_amd64.pyd +0 -0
  74. nvmath/bindings/cusolverSp.pxd +95 -0
  75. nvmath/bindings/cusolverSp.pyi +70 -0
  76. nvmath/bindings/cusparse.cp314t-win_amd64.pyd +0 -0
  77. nvmath/bindings/cusparse.pxd +546 -0
  78. nvmath/bindings/cusparse.pyi +1017 -0
  79. nvmath/bindings/cusparseLt.cp314t-win_amd64.pyd +0 -0
  80. nvmath/bindings/cusparseLt.pxd +99 -0
  81. nvmath/bindings/cusparseLt.pyi +252 -0
  82. nvmath/bindings/cutensor.cp314t-win_amd64.pyd +0 -0
  83. nvmath/bindings/cutensor.pxd +98 -0
  84. nvmath/bindings/cutensor.pyi +324 -0
  85. nvmath/bindings/cycublas.cp314t-win_amd64.pyd +0 -0
  86. nvmath/bindings/cycublas.pxd +664 -0
  87. nvmath/bindings/cycublasLt.cp314t-win_amd64.pyd +0 -0
  88. nvmath/bindings/cycublasLt.pxd +1045 -0
  89. nvmath/bindings/cycublasMp.pxd +171 -0
  90. nvmath/bindings/cycudss.cp314t-win_amd64.pyd +0 -0
  91. nvmath/bindings/cycudss.pxd +277 -0
  92. nvmath/bindings/cycufft.cp314t-win_amd64.pyd +0 -0
  93. nvmath/bindings/cycufft.pxd +333 -0
  94. nvmath/bindings/cycufftMp.pxd +342 -0
  95. nvmath/bindings/cycurand.cp314t-win_amd64.pyd +0 -0
  96. nvmath/bindings/cycurand.pxd +141 -0
  97. nvmath/bindings/cycusolver.cp314t-win_amd64.pyd +0 -0
  98. nvmath/bindings/cycusolver.pxd +137 -0
  99. nvmath/bindings/cycusolverDn.cp314t-win_amd64.pyd +0 -0
  100. nvmath/bindings/cycusolverDn.pxd +443 -0
  101. nvmath/bindings/cycusolverMp.pxd +107 -0
  102. nvmath/bindings/cycusolverSp.cp314t-win_amd64.pyd +0 -0
  103. nvmath/bindings/cycusolverSp.pxd +93 -0
  104. nvmath/bindings/cycusparse.cp314t-win_amd64.pyd +0 -0
  105. nvmath/bindings/cycusparse.pxd +679 -0
  106. nvmath/bindings/cycusparseLt.cp314t-win_amd64.pyd +0 -0
  107. nvmath/bindings/cycusparseLt.pxd +135 -0
  108. nvmath/bindings/cycutensor.cp314t-win_amd64.pyd +0 -0
  109. nvmath/bindings/cycutensor.pxd +189 -0
  110. nvmath/bindings/cymathdx.cp314t-win_amd64.pyd +0 -0
  111. nvmath/bindings/cymathdx.pxd +552 -0
  112. nvmath/bindings/cynvshmem.pxd +118 -0
  113. nvmath/bindings/mathdx.cp314t-win_amd64.pyd +0 -0
  114. nvmath/bindings/mathdx.pxd +182 -0
  115. nvmath/bindings/mathdx.pyi +1562 -0
  116. nvmath/bindings/nvpl/__init__.pxd +0 -0
  117. nvmath/bindings/nvpl/__init__.py +13 -0
  118. nvmath/bindings/nvpl/_internal/__init__.pxd +0 -0
  119. nvmath/bindings/nvpl/_internal/__init__.py +0 -0
  120. nvmath/bindings/nvpl/_internal/blas.cp314t-win_amd64.pyd +0 -0
  121. nvmath/bindings/nvpl/_internal/blas.pxd +237 -0
  122. nvmath/bindings/nvpl/_internal/fft.cp314t-win_amd64.pyd +0 -0
  123. nvmath/bindings/nvpl/_internal/fft.pxd +36 -0
  124. nvmath/bindings/nvpl/blas.cp314t-win_amd64.pyd +0 -0
  125. nvmath/bindings/nvpl/blas.pxd +131 -0
  126. nvmath/bindings/nvpl/blas.pyi +168 -0
  127. nvmath/bindings/nvpl/cyblas.cp314t-win_amd64.pyd +0 -0
  128. nvmath/bindings/nvpl/cyblas.pxd +280 -0
  129. nvmath/bindings/nvpl/cyfft.cp314t-win_amd64.pyd +0 -0
  130. nvmath/bindings/nvpl/cyfft.pxd +93 -0
  131. nvmath/bindings/nvpl/fft.cp314t-win_amd64.pyd +0 -0
  132. nvmath/bindings/nvpl/fft.pxd +100 -0
  133. nvmath/bindings/nvpl/fft.pyi +168 -0
  134. nvmath/bindings/nvshmem.pxd +54 -0
  135. nvmath/bindings/nvshmem.pyi +191 -0
  136. nvmath/device/__init__.py +38 -0
  137. nvmath/device/_deprecated.py +33 -0
  138. nvmath/device/common.py +315 -0
  139. nvmath/device/common_backend.py +131 -0
  140. nvmath/device/common_cuda.py +201 -0
  141. nvmath/device/common_numba.py +300 -0
  142. nvmath/device/common_numba_cuda_mlir.py +202 -0
  143. nvmath/device/common_opaque_tensor.py +201 -0
  144. nvmath/device/cublasdx.py +1606 -0
  145. nvmath/device/cublasdx_backend.py +860 -0
  146. nvmath/device/cublasdx_numba.py +1534 -0
  147. nvmath/device/cublasdx_numba_cuda_mlir.py +208 -0
  148. nvmath/device/cufftdx.py +373 -0
  149. nvmath/device/cufftdx_backend.py +220 -0
  150. nvmath/device/cufftdx_numba.py +140 -0
  151. nvmath/device/cufftdx_numba_cuda_mlir.py +79 -0
  152. nvmath/device/curand_kernel.py +9147 -0
  153. nvmath/device/cusolverdx.py +2708 -0
  154. nvmath/device/cusolverdx_backend.py +440 -0
  155. nvmath/device/cusolverdx_numba.py +567 -0
  156. nvmath/device/cusolverdx_numba_cuda_mlir.py +604 -0
  157. nvmath/device/cusolverdx_overload_backend.py +1029 -0
  158. nvmath/device/llvm_array.py +29 -0
  159. nvmath/device/random.py +441 -0
  160. nvmath/device/random_helpers.py +23 -0
  161. nvmath/device/random_states.py +187 -0
  162. nvmath/device/types.py +138 -0
  163. nvmath/device/vector_types_numba.py +259 -0
  164. nvmath/distributed/__init__.py +200 -0
  165. nvmath/distributed/_internal/__init__.py +0 -0
  166. nvmath/distributed/_internal/nccl.py +86 -0
  167. nvmath/distributed/_internal/nvshmem.py +307 -0
  168. nvmath/distributed/_internal/symmetric_memory.py +35 -0
  169. nvmath/distributed/_internal/tensor_ifc.py +70 -0
  170. nvmath/distributed/_internal/tensor_ifc_cupy.py +68 -0
  171. nvmath/distributed/_internal/tensor_ifc_host_device.py +172 -0
  172. nvmath/distributed/_internal/tensor_ifc_numpy.py +46 -0
  173. nvmath/distributed/_internal/tensor_ifc_torch.py +162 -0
  174. nvmath/distributed/_internal/tensor_wrapper.py +81 -0
  175. nvmath/distributed/_utils.py +167 -0
  176. nvmath/distributed/distribution/__init__.py +30 -0
  177. nvmath/distributed/distribution/_configuration.py +39 -0
  178. nvmath/distributed/distribution/distributions.py +1024 -0
  179. nvmath/distributed/distribution/redistribute.py +1284 -0
  180. nvmath/distributed/fft/__init__.py +7 -0
  181. nvmath/distributed/fft/_configuration.py +82 -0
  182. nvmath/distributed/fft/fft.py +2742 -0
  183. nvmath/distributed/linalg/__init__.py +22 -0
  184. nvmath/distributed/linalg/_internal/__init__.py +3 -0
  185. nvmath/distributed/linalg/_internal/epilog_protocol.py +586 -0
  186. nvmath/distributed/linalg/_internal/matmul_desc_ifc.py +28 -0
  187. nvmath/distributed/linalg/advanced/__init__.py +8 -0
  188. nvmath/distributed/linalg/advanced/_configuration.py +171 -0
  189. nvmath/distributed/linalg/advanced/matmulmod.py +3573 -0
  190. nvmath/distributed/linalg/generic/__init__.py +8 -0
  191. nvmath/distributed/linalg/generic/_caching.py +66 -0
  192. nvmath/distributed/linalg/generic/_configuration.py +61 -0
  193. nvmath/distributed/linalg/generic/_factorization.py +172 -0
  194. nvmath/distributed/linalg/generic/_initialization.py +966 -0
  195. nvmath/distributed/linalg/generic/_problem_spec.py +511 -0
  196. nvmath/distributed/linalg/generic/solvermod.py +1368 -0
  197. nvmath/distributed/process_group.py +408 -0
  198. nvmath/fft/__init__.py +7 -0
  199. nvmath/fft/_configuration.py +189 -0
  200. nvmath/fft/_exec_utils.py +82 -0
  201. nvmath/fft/_helpers.py +237 -0
  202. nvmath/fft/fft.py +3122 -0
  203. nvmath/internal/__init__.pxd +3 -0
  204. nvmath/internal/__init__.py +10 -0
  205. nvmath/internal/_bindings.cp314t-win_amd64.pyd +0 -0
  206. nvmath/internal/_bindings.pxd +18 -0
  207. nvmath/internal/_device_utils.py +45 -0
  208. nvmath/internal/_layout/__init__.pxd +3 -0
  209. nvmath/internal/_layout/__init__.py +7 -0
  210. nvmath/internal/_layout/_layout.cp314t-win_amd64.pyd +0 -0
  211. nvmath/internal/_layout/_layout.pxd +1303 -0
  212. nvmath/internal/_layout/_layout.pyi +1145 -0
  213. nvmath/internal/enum_utils.py +142 -0
  214. nvmath/internal/formatters.py +87 -0
  215. nvmath/internal/mem_limit.py +51 -0
  216. nvmath/internal/memory.cp314t-win_amd64.pyd +0 -0
  217. nvmath/internal/memory.pxd +13 -0
  218. nvmath/internal/memory.pyi +50 -0
  219. nvmath/internal/ndbuffer/__init__.pxd +3 -0
  220. nvmath/internal/ndbuffer/__init__.py +9 -0
  221. nvmath/internal/ndbuffer/_copy_kernel.cp314t-win_amd64.pyd +0 -0
  222. nvmath/internal/ndbuffer/_copy_kernel.pxd +10 -0
  223. nvmath/internal/ndbuffer/_jit.cp314t-win_amd64.pyd +0 -0
  224. nvmath/internal/ndbuffer/_jit.pxd +7 -0
  225. nvmath/internal/ndbuffer/_ndbuffer.cp314t-win_amd64.pyd +0 -0
  226. nvmath/internal/ndbuffer/_ndbuffer.pxd +40 -0
  227. nvmath/internal/ndbuffer/_ndbuffer.pyi +463 -0
  228. nvmath/internal/ndbuffer/copy_kernel/args.h +34 -0
  229. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/array_view.h +52 -0
  230. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/elementwise.h +68 -0
  231. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/grid_indexer.h +69 -0
  232. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/transposed.h +242 -0
  233. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/type_utils.h +39 -0
  234. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/utils.h +132 -0
  235. nvmath/internal/ndbuffer/copy_kernel/copy_kernel_impl/vec.h +159 -0
  236. nvmath/internal/ndbuffer/copy_kernel/elementwise.h +53 -0
  237. nvmath/internal/ndbuffer/copy_kernel/transposed.h +58 -0
  238. nvmath/internal/package_ifc.py +168 -0
  239. nvmath/internal/package_ifc_cuda.py +57 -0
  240. nvmath/internal/package_ifc_cupy.py +67 -0
  241. nvmath/internal/package_ifc_torch.py +69 -0
  242. nvmath/internal/package_wrapper.py +14 -0
  243. nvmath/internal/tensor_ifc.py +179 -0
  244. nvmath/internal/tensor_ifc_cupy.py +234 -0
  245. nvmath/internal/tensor_ifc_ndbuffer.py +147 -0
  246. nvmath/internal/tensor_ifc_numpy.py +184 -0
  247. nvmath/internal/tensor_ifc_torch.py +178 -0
  248. nvmath/internal/tensor_wrapper.py +160 -0
  249. nvmath/internal/typemaps.py +113 -0
  250. nvmath/internal/utils.py +805 -0
  251. nvmath/linalg/__init__.py +56 -0
  252. nvmath/linalg/_internal/__init__.py +3 -0
  253. nvmath/linalg/_internal/algo_cap_ifc.py +82 -0
  254. nvmath/linalg/_internal/algo_config_ifc.py +43 -0
  255. nvmath/linalg/_internal/batch.py +234 -0
  256. nvmath/linalg/_internal/enum_to_tuples.py +64 -0
  257. nvmath/linalg/_internal/epilog_protocol.py +766 -0
  258. nvmath/linalg/_internal/layout.py +624 -0
  259. nvmath/linalg/_internal/matmul_desc_ifc.py +28 -0
  260. nvmath/linalg/_internal/matmul_pref_ifc.py +27 -0
  261. nvmath/linalg/_internal/matrix_layout_ifc.py +26 -0
  262. nvmath/linalg/_internal/solver_utils.py +432 -0
  263. nvmath/linalg/_internal/typemaps.py +144 -0
  264. nvmath/linalg/_internal/utils.py +157 -0
  265. nvmath/linalg/advanced/__init__.py +8 -0
  266. nvmath/linalg/advanced/_algorithmmod.py +170 -0
  267. nvmath/linalg/advanced/_configuration.py +351 -0
  268. nvmath/linalg/advanced/helpers/__init__.py +5 -0
  269. nvmath/linalg/advanced/helpers/matmul.py +1316 -0
  270. nvmath/linalg/advanced/matmulmod.py +3734 -0
  271. nvmath/linalg/generic/__init__.py +53 -0
  272. nvmath/linalg/generic/_configuration/__init__.py +39 -0
  273. nvmath/linalg/generic/_configuration/layout.py +263 -0
  274. nvmath/linalg/generic/_configuration/match.py +734 -0
  275. nvmath/linalg/generic/_configuration/qualifiers.py +493 -0
  276. nvmath/linalg/generic/_configuration/solver_configuration.py +59 -0
  277. nvmath/linalg/generic/_configuration/wrap.py +217 -0
  278. nvmath/linalg/generic/_dtype.py +15 -0
  279. nvmath/linalg/generic/matmulmod.py +2094 -0
  280. nvmath/linalg/generic/solvermod.py +1301 -0
  281. nvmath/memory.py +279 -0
  282. nvmath/sparse/__init__.py +38 -0
  283. nvmath/sparse/_internal/__init__.py +21 -0
  284. nvmath/sparse/_internal/common_utils.py +147 -0
  285. nvmath/sparse/_internal/cudss_config_ifc.py +702 -0
  286. nvmath/sparse/_internal/cudss_data_ifc.py +399 -0
  287. nvmath/sparse/_internal/cudss_utils.py +506 -0
  288. nvmath/sparse/_internal/cusparse_utils.py +382 -0
  289. nvmath/sparse/_internal/sparse_bsc_ifc.py +303 -0
  290. nvmath/sparse/_internal/sparse_bsr_ifc.py +305 -0
  291. nvmath/sparse/_internal/sparse_coo_ifc.py +256 -0
  292. nvmath/sparse/_internal/sparse_csc_ifc.py +268 -0
  293. nvmath/sparse/_internal/sparse_csr_ifc.py +288 -0
  294. nvmath/sparse/_internal/sparse_dia_ifc.py +242 -0
  295. nvmath/sparse/_internal/sparse_format_helpers.py +601 -0
  296. nvmath/sparse/_internal/sparse_tensor_ifc.py +133 -0
  297. nvmath/sparse/_internal/sparse_ust_ifc.py +141 -0
  298. nvmath/sparse/_internal/utils.py +56 -0
  299. nvmath/sparse/advanced/__init__.py +7 -0
  300. nvmath/sparse/advanced/_configuration.py +227 -0
  301. nvmath/sparse/advanced/direct_solver.py +2069 -0
  302. nvmath/sparse/generic/__init__.py +7 -0
  303. nvmath/sparse/generic/_configuration.py +129 -0
  304. nvmath/sparse/generic/_helpers.py +137 -0
  305. nvmath/sparse/generic/_thunks.py +21 -0
  306. nvmath/sparse/generic/matmulmod.py +2353 -0
  307. nvmath/sparse/ust/__init__.py +7 -0
  308. nvmath/sparse/ust/_converters.py +422 -0
  309. nvmath/sparse/ust/_cpp.py +28 -0
  310. nvmath/sparse/ust/_drawer.py +565 -0
  311. nvmath/sparse/ust/_emitter.py +1033 -0
  312. nvmath/sparse/ust/_jit.py +188 -0
  313. nvmath/sparse/ust/_kernel.py +282 -0
  314. nvmath/sparse/ust/_utils.py +149 -0
  315. nvmath/sparse/ust/interfaces/__init__.py +0 -0
  316. nvmath/sparse/ust/interfaces/torch_interface.py +476 -0
  317. nvmath/sparse/ust/tensor.py +1016 -0
  318. nvmath/sparse/ust/tensor_format.py +957 -0
  319. nvmath/tensor/__init__.py +6 -0
  320. nvmath/tensor/_configuration.py +120 -0
  321. nvmath/tensor/_internal/__init__.py +3 -0
  322. nvmath/tensor/_internal/cutensor_config_ifc.py +279 -0
  323. nvmath/tensor/_internal/cutensor_utils.py +230 -0
  324. nvmath/tensor/_internal/data.py +43 -0
  325. nvmath/tensor/_internal/einsum_parser.py +444 -0
  326. nvmath/tensor/_internal/typemaps.py +96 -0
  327. nvmath/tensor/contract.py +1900 -0
  328. nvmath_python-1.0.0.dist-info/METADATA +134 -0
  329. nvmath_python-1.0.0.dist-info/RECORD +332 -0
  330. nvmath_python-1.0.0.dist-info/WHEEL +5 -0
  331. nvmath_python-1.0.0.dist-info/licenses/LICENSE +177 -0
  332. nvmath_python-1.0.0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,53 @@
1
+ # Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from ._configuration import (
6
+ DiagonalMatrixQualifier,
7
+ GeneralMatrixQualifier,
8
+ HermitianMatrixQualifier,
9
+ MatmulOptions,
10
+ MatrixQualifier,
11
+ SymmetricMatrixQualifier,
12
+ TriangularMatrixQualifier,
13
+ matrix_qualifiers_dtype,
14
+ )
15
+ from .matmulmod import (
16
+ DiagType,
17
+ ExecutionCPU,
18
+ ExecutionCUDA,
19
+ FillMode,
20
+ InvalidMatmulState,
21
+ Matmul,
22
+ SideMode,
23
+ matmul,
24
+ )
25
+ from .solvermod import (
26
+ DirectSolver,
27
+ DirectSolverOptions,
28
+ InvalidDirectSolverState,
29
+ direct_solver,
30
+ )
31
+
32
+ __all__ = (
33
+ "DiagonalMatrixQualifier",
34
+ "ExecutionCPU",
35
+ "ExecutionCUDA",
36
+ "GeneralMatrixQualifier",
37
+ "HermitianMatrixQualifier",
38
+ "InvalidMatmulState",
39
+ "matmul",
40
+ "Matmul",
41
+ "MatmulOptions",
42
+ "MatrixQualifier",
43
+ "matrix_qualifiers_dtype",
44
+ "SymmetricMatrixQualifier",
45
+ "TriangularMatrixQualifier",
46
+ "SideMode",
47
+ "FillMode",
48
+ "DiagType",
49
+ "DirectSolverOptions",
50
+ "DirectSolver",
51
+ "direct_solver",
52
+ "InvalidDirectSolverState",
53
+ )
@@ -0,0 +1,39 @@
1
+ # Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from .layout import (
6
+ CACHED_LAYOUT_CHECKERS,
7
+ mm_layout_checker_getter,
8
+ )
9
+ from .match import (
10
+ select_blas_group_mm_function,
11
+ select_blas_mm_function,
12
+ )
13
+ from .qualifiers import (
14
+ DiagonalMatrixQualifier,
15
+ GeneralMatrixQualifier,
16
+ HermitianMatrixQualifier,
17
+ MatmulOptions,
18
+ MatrixQualifier,
19
+ SymmetricMatrixQualifier,
20
+ TriangularMatrixQualifier,
21
+ matrix_qualifiers_dtype,
22
+ vector_to_square,
23
+ )
24
+
25
+ __all__ = [
26
+ "DiagonalMatrixQualifier",
27
+ "GeneralMatrixQualifier",
28
+ "HermitianMatrixQualifier",
29
+ "MatmulOptions",
30
+ "MatrixQualifier",
31
+ "mm_layout_checker_getter",
32
+ "matrix_qualifiers_dtype",
33
+ "SymmetricMatrixQualifier",
34
+ "TriangularMatrixQualifier",
35
+ "vector_to_square",
36
+ "select_blas_mm_function",
37
+ "select_blas_group_mm_function",
38
+ "CACHED_LAYOUT_CHECKERS",
39
+ ]
@@ -0,0 +1,263 @@
1
+ # Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from nvmath.bindings import cublasLt as cublaslt
6
+ from nvmath.bindings.cublasLt import Order
7
+ from nvmath.linalg._internal.layout import BLASMatrixTraits, BLASMMTraitsView, MMLayoutChecker, MMLayoutCheckerLookupTable
8
+
9
+ from .qualifiers import MatrixQualifier
10
+
11
+
12
+ def mm_layout_checker_getter(qualifiers: MatrixQualifier) -> MMLayoutChecker:
13
+ """Return a function which checks if a layout is supported for a BLAS matrix
14
+ multiplication."""
15
+ match (qualifiers[0]["abbreviation"], qualifiers[1]["abbreviation"], qualifiers[2]["abbreviation"]):
16
+ case ("ge", "ge", "ge"):
17
+ return is_supported_gemm_layout
18
+ case ("sy" | "he" | "dg", "ge", "ge"):
19
+ return is_supported_symm_layout_left
20
+ case ("ge", "sy" | "he" | "dg", "ge"):
21
+ return is_supported_symm_layout_right
22
+ case ("tr", "ge", "ge"):
23
+ return is_supported_trmm_layout_left
24
+ case ("ge", "tr", "ge"):
25
+ return is_supported_trmm_layout_right
26
+ case _:
27
+ raise NotImplementedError(
28
+ f"Layout supported checker for {qualifiers[0]['abbreviation']}, {qualifiers[1]['abbreviation']}, "
29
+ f"{qualifiers[2]['abbreviation']} is not implemented."
30
+ )
31
+
32
+
33
+ def is_supported_gemm_layout(traits: BLASMMTraitsView) -> bool:
34
+ """Return True if the layout is supported for a BLAS matrix multiplication.
35
+
36
+ Rules:
37
+ - All operands must be COL order.
38
+ - C must be non-conjugate non-transpose.
39
+ - The general matrix, B, must not be conjugate non-transpose.
40
+ - The general matrix, A, must not be conjugate non-transpose.
41
+ """
42
+ a_layout = traits.a_layout_traits
43
+ b_layout = traits.b_layout_traits
44
+ c_layout = traits.c_layout_traits
45
+ match (a_layout, b_layout, c_layout):
46
+ case (BLASMatrixTraits(is_conjugate=True, is_transpose=False), _, _):
47
+ # If A is conjugate non-transpose that is unsupported.
48
+ return False
49
+ case (_, BLASMatrixTraits(is_conjugate=True, is_transpose=False), _):
50
+ # If B is conjugate non-transpose that is unsupported.
51
+ return False
52
+ case (
53
+ BLASMatrixTraits(order=cublaslt.Order.COL),
54
+ BLASMatrixTraits(order=cublaslt.Order.COL),
55
+ BLASMatrixTraits(is_conjugate=False, is_transpose=False, order=cublaslt.Order.COL),
56
+ ):
57
+ return True
58
+ case _:
59
+ return False
60
+
61
+
62
+ GEMM_LAYOUT_LOOKUP_TABLE: MMLayoutCheckerLookupTable = {
63
+ (Order.COL, Order.COL, Order.COL, False, False, False): [],
64
+ (Order.COL, Order.COL, Order.ROW, False, False, False): ["transpose_and_reorder_C", "swap_AB_and_transpose_ABC"],
65
+ (Order.COL, Order.COL, Order.ROW, False, True, False): ["transpose_and_reorder_C", "swap_AB_and_transpose_ABC"],
66
+ (Order.COL, Order.COL, Order.ROW, True, False, False): ["transpose_and_reorder_C", "swap_AB_and_transpose_ABC"],
67
+ (Order.COL, Order.COL, Order.ROW, True, True, False): ["transpose_and_reorder_C", "swap_AB_and_transpose_ABC"],
68
+ (Order.COL, Order.ROW, Order.COL, False, False, False): ["transpose_and_reorder_B"],
69
+ (Order.COL, Order.ROW, Order.COL, False, True, False): ["transpose_and_reorder_B"],
70
+ (Order.COL, Order.ROW, Order.ROW, False, False, False): [
71
+ "transpose_and_reorder_B",
72
+ "transpose_and_reorder_C",
73
+ "swap_AB_and_transpose_ABC",
74
+ ],
75
+ (Order.COL, Order.ROW, Order.ROW, True, False, False): [
76
+ "transpose_and_reorder_B",
77
+ "transpose_and_reorder_C",
78
+ "swap_AB_and_transpose_ABC",
79
+ ],
80
+ (Order.ROW, Order.COL, Order.COL, False, False, False): ["transpose_and_reorder_A"],
81
+ (Order.ROW, Order.COL, Order.COL, True, False, False): ["transpose_and_reorder_A"],
82
+ (Order.ROW, Order.COL, Order.ROW, False, False, False): [
83
+ "transpose_and_reorder_A",
84
+ "transpose_and_reorder_C",
85
+ "swap_AB_and_transpose_ABC",
86
+ ],
87
+ (Order.ROW, Order.COL, Order.ROW, False, True, False): [
88
+ "transpose_and_reorder_A",
89
+ "transpose_and_reorder_C",
90
+ "swap_AB_and_transpose_ABC",
91
+ ],
92
+ (Order.ROW, Order.ROW, Order.COL, False, False, False): ["transpose_and_reorder_A", "transpose_and_reorder_B"],
93
+ (Order.ROW, Order.ROW, Order.COL, False, True, False): ["transpose_and_reorder_A", "transpose_and_reorder_B"],
94
+ (Order.ROW, Order.ROW, Order.COL, True, False, False): ["transpose_and_reorder_A", "transpose_and_reorder_B"],
95
+ (Order.ROW, Order.ROW, Order.COL, True, True, False): ["transpose_and_reorder_A", "transpose_and_reorder_B"],
96
+ (Order.ROW, Order.ROW, Order.ROW, False, False, False): [
97
+ "transpose_and_reorder_A",
98
+ "transpose_and_reorder_B",
99
+ "transpose_and_reorder_C",
100
+ "swap_AB_and_transpose_ABC",
101
+ ],
102
+ }
103
+
104
+
105
+ def is_supported_symm_layout(traits: BLASMMTraitsView, left_side: bool) -> bool:
106
+ """Return True if the layout is supported for a BLAS symmetric matrix multiplication.
107
+
108
+ Rules:
109
+ - All operands must be COL order.
110
+ - The general matrix, C, must be non-conjugate and non-transpose.
111
+ - The general matrix, B, must be non-conjugate and non-transpose.
112
+ - The symmetric matrix, A, must be non-conjugate; transpose is allowed.
113
+ """
114
+ if left_side:
115
+ t_layout = traits.a_layout_traits
116
+ g_layout = traits.b_layout_traits
117
+ else:
118
+ g_layout = traits.a_layout_traits
119
+ t_layout = traits.b_layout_traits
120
+ c_layout = traits.c_layout_traits
121
+ match (t_layout, g_layout, c_layout):
122
+ case (
123
+ BLASMatrixTraits(is_conjugate=False, order=cublaslt.Order.COL),
124
+ BLASMatrixTraits(is_conjugate=False, is_transpose=False, order=cublaslt.Order.COL),
125
+ BLASMatrixTraits(is_conjugate=False, is_transpose=False, order=cublaslt.Order.COL),
126
+ ):
127
+ return True
128
+ case _:
129
+ return False
130
+
131
+
132
+ def is_supported_symm_layout_left(traits: BLASMMTraitsView) -> bool:
133
+ return is_supported_symm_layout(traits, left_side=True)
134
+
135
+
136
+ SYMM_LAYOUT_LOOKUP_TABLE_LEFT: MMLayoutCheckerLookupTable = {
137
+ (Order.COL, Order.COL, Order.COL, False, False, False): [],
138
+ (Order.ROW, Order.COL, Order.COL, False, False, False): ["transpose_and_reorder_A"],
139
+ (Order.ROW, Order.COL, Order.ROW, False, False, False): [
140
+ "transpose_and_reorder_A",
141
+ "transpose_and_reorder_C",
142
+ "swap_AB_and_transpose_ABC",
143
+ ],
144
+ (Order.ROW, Order.ROW, Order.ROW, False, False, False): [
145
+ "transpose_and_reorder_A",
146
+ "transpose_and_reorder_B",
147
+ "transpose_and_reorder_C",
148
+ "swap_AB_and_transpose_ABC",
149
+ ],
150
+ }
151
+
152
+
153
+ def is_supported_symm_layout_right(traits: BLASMMTraitsView) -> bool:
154
+ return is_supported_symm_layout(traits, left_side=False)
155
+
156
+
157
+ SYMM_LAYOUT_LOOKUP_TABLE_RIGHT: MMLayoutCheckerLookupTable = {
158
+ (Order.COL, Order.COL, Order.COL, False, False, False): [],
159
+ (Order.COL, Order.ROW, Order.COL, False, False, False): ["transpose_and_reorder_B"],
160
+ (Order.COL, Order.ROW, Order.ROW, False, False, False): [
161
+ "transpose_and_reorder_B",
162
+ "transpose_and_reorder_C",
163
+ "swap_AB_and_transpose_ABC",
164
+ ],
165
+ (Order.ROW, Order.ROW, Order.ROW, False, False, False): [
166
+ "transpose_and_reorder_A",
167
+ "transpose_and_reorder_B",
168
+ "transpose_and_reorder_C",
169
+ "swap_AB_and_transpose_ABC",
170
+ ],
171
+ }
172
+
173
+
174
+ def is_supported_trmm_layout(traits: BLASMMTraitsView, left_side: bool) -> bool:
175
+ """Return True if the layout is supported for a BLAS triangular matrix multiplication.
176
+
177
+ Rules:
178
+ - All operands must be COL order.
179
+ - The general matrix, C, must be non-conjugate and non-transpose.
180
+ - The general matrix, B, must be non-conjugate and non-transpose.
181
+ - The triangular matrix, A, must not be conjugate non-transpose.
182
+ """
183
+ if left_side:
184
+ t_layout = traits.a_layout_traits
185
+ g_layout = traits.b_layout_traits
186
+ else:
187
+ g_layout = traits.a_layout_traits
188
+ t_layout = traits.b_layout_traits
189
+ c_layout = traits.c_layout_traits
190
+ match (t_layout, g_layout, c_layout):
191
+ case (BLASMatrixTraits(is_conjugate=True, is_transpose=False), _, _):
192
+ # If A is conjugate non-transpose that is unsupported.
193
+ return False
194
+ case (
195
+ BLASMatrixTraits(order=cublaslt.Order.COL),
196
+ BLASMatrixTraits(is_conjugate=False, is_transpose=False, order=cublaslt.Order.COL),
197
+ BLASMatrixTraits(is_conjugate=False, is_transpose=False, order=cublaslt.Order.COL),
198
+ ):
199
+ return True
200
+ case _:
201
+ return False
202
+
203
+
204
+ def is_supported_trmm_layout_left(traits: BLASMMTraitsView) -> bool:
205
+ return is_supported_trmm_layout(traits, left_side=True)
206
+
207
+
208
+ TRMM_LAYOUT_LOOKUP_TABLE_LEFT: MMLayoutCheckerLookupTable = {
209
+ (Order.COL, Order.COL, Order.COL, False, False, False): [],
210
+ (Order.ROW, Order.COL, Order.COL, False, False, False): ["transpose_and_reorder_A"],
211
+ (Order.ROW, Order.COL, Order.COL, True, False, False): ["transpose_and_reorder_A"],
212
+ (Order.ROW, Order.COL, Order.ROW, False, False, False): [
213
+ "transpose_and_reorder_A",
214
+ "transpose_and_reorder_C",
215
+ "swap_AB_and_transpose_ABC",
216
+ ],
217
+ (Order.ROW, Order.COL, Order.ROW, False, True, False): [
218
+ "transpose_and_reorder_A",
219
+ "transpose_and_reorder_C",
220
+ "swap_AB_and_transpose_ABC",
221
+ ],
222
+ (Order.ROW, Order.ROW, Order.ROW, False, False, False): [
223
+ "transpose_and_reorder_A",
224
+ "transpose_and_reorder_B",
225
+ "transpose_and_reorder_C",
226
+ "swap_AB_and_transpose_ABC",
227
+ ],
228
+ }
229
+
230
+
231
+ def is_supported_trmm_layout_right(traits: BLASMMTraitsView) -> bool:
232
+ return is_supported_trmm_layout(traits, left_side=False)
233
+
234
+
235
+ TRMM_LAYOUT_LOOKUP_TABLE_RIGHT: MMLayoutCheckerLookupTable = {
236
+ (Order.COL, Order.COL, Order.COL, False, False, False): [],
237
+ (Order.COL, Order.ROW, Order.COL, False, False, False): ["transpose_and_reorder_B"],
238
+ (Order.COL, Order.ROW, Order.COL, False, True, False): ["transpose_and_reorder_B"],
239
+ (Order.COL, Order.ROW, Order.ROW, False, False, False): [
240
+ "transpose_and_reorder_B",
241
+ "transpose_and_reorder_C",
242
+ "swap_AB_and_transpose_ABC",
243
+ ],
244
+ (Order.COL, Order.ROW, Order.ROW, True, False, False): [
245
+ "transpose_and_reorder_B",
246
+ "transpose_and_reorder_C",
247
+ "swap_AB_and_transpose_ABC",
248
+ ],
249
+ (Order.ROW, Order.ROW, Order.ROW, False, False, False): [
250
+ "transpose_and_reorder_A",
251
+ "transpose_and_reorder_B",
252
+ "transpose_and_reorder_C",
253
+ "swap_AB_and_transpose_ABC",
254
+ ],
255
+ }
256
+
257
+ CACHED_LAYOUT_CHECKERS: dict[MMLayoutChecker, MMLayoutCheckerLookupTable] = {
258
+ is_supported_gemm_layout: GEMM_LAYOUT_LOOKUP_TABLE,
259
+ is_supported_symm_layout_left: SYMM_LAYOUT_LOOKUP_TABLE_LEFT,
260
+ is_supported_symm_layout_right: SYMM_LAYOUT_LOOKUP_TABLE_RIGHT,
261
+ is_supported_trmm_layout_left: TRMM_LAYOUT_LOOKUP_TABLE_LEFT,
262
+ is_supported_trmm_layout_right: TRMM_LAYOUT_LOOKUP_TABLE_RIGHT,
263
+ }