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,7 @@
1
+ # Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from ._configuration import * # noqa: F403
6
+ from ._helpers import * # noqa: F403
7
+ from .matmulmod import * # noqa: F403
@@ -0,0 +1,129 @@
1
+ # Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ __all__ = [
6
+ "ExecutionCUDA",
7
+ "MatmulOptions",
8
+ "matrix_qualifiers_dtype",
9
+ "ComputeType",
10
+ ]
11
+
12
+ import dataclasses
13
+ from enum import IntEnum
14
+ from logging import Logger
15
+ from typing import Literal
16
+
17
+ import numpy as _np
18
+
19
+ from nvmath._internal import templates
20
+ from nvmath._utils import CudaDataType
21
+ from nvmath.internal.mem_limit import check_memory_str
22
+ from nvmath.memory import BaseCUDAMemoryManager, BaseCUDAMemoryManagerAsync
23
+
24
+
25
+ @dataclasses.dataclass(frozen=True, slots=True, kw_only=True)
26
+ class ExecutionCUDA(templates.ExecutionCUDA):
27
+ """
28
+ A data class for providing GPU execution options.
29
+
30
+ Attributes:
31
+ device_id: CUDA device ordinal (only used if the operand resides on the CPU). The
32
+ default value is 0.
33
+
34
+ .. seealso::
35
+ :class:`ExecutionCPU`, :class:`Matmul`, :func:`matmul`
36
+ """
37
+
38
+ pass
39
+
40
+
41
+ @dataclasses.dataclass(frozen=True, slots=True, kw_only=True)
42
+ class ExecutionCPU(templates.ExecutionCPU):
43
+ """
44
+ A data class for providing CPU execution options.
45
+
46
+ Attributes:
47
+ num_threads: The number of CPU threads used to execute the operation.
48
+ If not specified, defaults to the number of CPU cores available to the
49
+ process.
50
+
51
+ .. seealso::
52
+ :class:`ExecutionCUDA`, :class:`Matmul`, :func:`matmul`,
53
+ """
54
+
55
+ pass
56
+
57
+
58
+ @dataclasses.dataclass
59
+ class MatmulOptions:
60
+ """A data class for providing options to the :class:`Matmul` object and the wrapper
61
+ function :func:`matmul`.
62
+
63
+ Attributes:
64
+ codegen (bool): If ``True`` the operation will not be dispatched to cuSPARSE
65
+ (even if it is supported) for UST operands. Instead, the kernel will be
66
+ generated, compiled just-in-time, and used. The default is ``False``.
67
+
68
+ compute_type (nvmath.sparse.ComputeType): CUDA compute type. A suitable compute type
69
+ will be selected if not specified.
70
+
71
+ logger (logging.Logger): Python Logger object. The root logger will be used if a
72
+ logger object is not provided.
73
+
74
+ memory_limit: Maximum memory available to the MM operation. It can be specified as a
75
+ value (with optional suffix like K[iB], M[iB], G[iB]) or as a percentage. The
76
+ default is 80% of the device memory.
77
+
78
+ blocking: A flag specifying the behavior of the execution functions and methods,
79
+ such as :func:`matmul` and :meth:`Matmul.execute`. When ``blocking`` is `True`,
80
+ the execution methods do not return until the operation is complete. When
81
+ ``blocking`` is ``"auto"``, the methods return immediately when the inputs are
82
+ on the GPU. The execution methods always block when the operands are on the CPU
83
+ to ensure that the user doesn't inadvertently use the result before it becomes
84
+ available. The default is ``"auto"``.
85
+
86
+ allocator: An object that supports the :class:`BaseCUDAMemoryManager` protocol, used
87
+ to draw device memory. If an allocator is not provided, a memory allocator from
88
+ the library package will be used (:func:`torch.cuda.caching_allocator_alloc` for
89
+ PyTorch operands, :func:`cupy.cuda.alloc` otherwise).
90
+
91
+ .. seealso::
92
+ :class:`Matmul`, :func:`matmul`
93
+ """
94
+
95
+ codegen: bool = False
96
+ compute_type: int | None = None
97
+ logger: Logger | None = None
98
+ memory_limit: int | str | None = r"80%"
99
+ blocking: Literal[True, "auto"] = "auto"
100
+ allocator: BaseCUDAMemoryManager | None = None
101
+
102
+ def __post_init__(self):
103
+ # Defer computing the memory limit till we know the device the operands are on.
104
+
105
+ if self.compute_type is not None:
106
+ self.compute_type = ComputeType(self.compute_type)
107
+
108
+ if self.memory_limit is None:
109
+ self.memory_limit = MatmulOptions.memory_limit
110
+
111
+ check_memory_str(self.memory_limit, "memory limit")
112
+
113
+ if self.blocking not in (True, "auto"):
114
+ raise ValueError("The value specified for blocking must be either True or 'auto'.")
115
+
116
+ if self.allocator is not None and not isinstance(self.allocator, BaseCUDAMemoryManager | BaseCUDAMemoryManagerAsync):
117
+ raise TypeError("The allocator must be an object of type that fulfills the BaseCUDAMemoryManager protocol.")
118
+
119
+
120
+ matrix_qualifiers_dtype = _np.dtype([("is_transpose", "<i4"), ("is_conjugate", "<i4")])
121
+
122
+
123
+ class ComputeType(IntEnum):
124
+ """The subset of `cudaDataType_t` that is supported by the generic sparse APIs."""
125
+
126
+ CUDA_R_32F = CudaDataType.CUDA_R_32F
127
+ CUDA_C_32F = CudaDataType.CUDA_C_32F
128
+ CUDA_R_64F = CudaDataType.CUDA_R_64F
129
+ CUDA_C_64F = CudaDataType.CUDA_C_64F
@@ -0,0 +1,137 @@
1
+ # Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ __all__ = ["compile_prolog", "compile_epilog", "compile_add", "compile_atomic_add", "compile_mul"]
6
+
7
+ from nvmath.sparse.ust._jit import compile_python_function
8
+
9
+ VALID_DTYPES = "float32", "float64", "double", "complex64", "complex128"
10
+
11
+
12
+ def compile_prolog(prolog, *, operand_label, dtype, compute_capability=None):
13
+ """
14
+ Compile a unary Python function with argument type ``dtype`` returning a value
15
+ of type ``dtype`` to device code.
16
+
17
+ Args:
18
+ prolog: The unary Python function to compile to device code.
19
+ operand_label: The operand to which the prolog applies ("a", "b").
20
+ dtype: The dtype of the prolog's argument. Any scalar Numba type can be provided.
21
+ compute_capability: The target compute capability, specified as a string
22
+ (``'80'``, ``'89'``, ...). The default is the compute capability of the
23
+ current device.
24
+
25
+ Returns:
26
+ The compiled device code as a bytes object.
27
+ """
28
+
29
+ valid_operand_labels = "a", "b", "c"
30
+ if operand_label not in valid_operand_labels:
31
+ raise ValueError(f"The operand label '{operand_label}' is invalid. It must one of {valid_operand_labels}.")
32
+
33
+ # TODO: any type supported by numba-cuda can be provided.
34
+ if dtype not in VALID_DTYPES:
35
+ raise ValueError(f"The dtype '{dtype}' is invalid. It must one of {VALID_DTYPES}.")
36
+
37
+ ltoir = compile_python_function(prolog, "prolog_" + operand_label, (dtype, dtype), compute_capability=compute_capability)
38
+ return ltoir
39
+
40
+
41
+ def compile_epilog(epilog, *, dtype, compute_capability=None):
42
+ """
43
+ Compile a unary Python function with argument type ``dtype`` returning a value
44
+ of type ``dtype`` to device code.
45
+
46
+ Args:
47
+ epilog: The unary Python function to compile to device code.
48
+ dtype: The dtype of the epilog's argument. Any scalar Numba type can be provided.
49
+ compute_capability: The target compute capability, specified as a string
50
+ (``'80'``, ``'89'``, ...). The default is the compute capability of the
51
+ current device.
52
+
53
+ Returns:
54
+ The compiled device code as a bytes object.
55
+ """
56
+
57
+ # TODO: any type supported by numba-cuda can be provided.
58
+ if dtype not in VALID_DTYPES:
59
+ raise ValueError(f"The dtype '{dtype}' is invalid. It must one of {VALID_DTYPES}.")
60
+
61
+ ltoir = compile_python_function(epilog, "epilog", (dtype, dtype), compute_capability=compute_capability)
62
+ return ltoir
63
+
64
+
65
+ def compile_add(add, *, dtype, compute_capability=None):
66
+ """
67
+ Compile a binary Python function with arguments of type ``dtype`` returning a value
68
+ of type ``dtype`` to device code. This function must satisfy the mathematical
69
+ requirements of a semiring addition operator.
70
+
71
+ Args:
72
+ add: The binary Python function to compile to device code.
73
+ dtype: The dtype of the epilog's argument. Any scalar Numba type can be provided.
74
+ compute_capability: The target compute capability, specified as a string
75
+ (``'80'``, ``'89'``, ...). The default is the compute capability of the
76
+ current device.
77
+
78
+ Returns:
79
+ The compiled device code as a bytes object.
80
+ """
81
+
82
+ # TODO: any type supported by numba-cuda can be provided.
83
+ if dtype not in VALID_DTYPES:
84
+ raise ValueError(f"The dtype '{dtype}' is invalid. It must one of {VALID_DTYPES}.")
85
+
86
+ ltoir = compile_python_function(add, "add", (dtype, dtype, dtype), compute_capability=compute_capability)
87
+ return ltoir
88
+
89
+
90
+ def compile_atomic_add(add, *, dtype, compute_capability=None):
91
+ """
92
+ Compile a binary Python function with arguments of type ``dtype`` returning a value
93
+ of type ``dtype`` to device code. This function must satisfy the mathematical
94
+ requirements of a semiring addition operator and must perform an **atomic** addition.
95
+
96
+ Args:
97
+ add: The binary Python function to compile to device code.
98
+ dtype: The dtype of the epilog's argument. Any scalar Numba type can be provided.
99
+ compute_capability: The target compute capability, specified as a string
100
+ (``'80'``, ``'89'``, ...). The default is the compute capability of the
101
+ current device.
102
+
103
+ Returns:
104
+ The compiled device code as a bytes object.
105
+ """
106
+
107
+ # TODO: any type supported by numba-cuda can be provided.
108
+ if dtype not in VALID_DTYPES:
109
+ raise ValueError(f"The dtype '{dtype}' is invalid. It must one of {VALID_DTYPES}.")
110
+
111
+ ltoir = compile_python_function(add, "atomic_add", (dtype, f"{dtype}*", dtype), compute_capability=compute_capability)
112
+ return ltoir
113
+
114
+
115
+ def compile_mul(add, *, dtype, compute_capability=None):
116
+ """
117
+ Compile a binary Python function with arguments of type ``dtype`` returning a value
118
+ of type ``dtype`` to device code. This function must satisfy the mathematical
119
+ requirements of a semiring multiplication operator.
120
+
121
+ Args:
122
+ add: The binary Python function to compile to device code.
123
+ dtype: The dtype of the epilog's argument. Any scalar Numba type can be provided.
124
+ compute_capability: The target compute capability, specified as a string
125
+ (``'80'``, ``'89'``, ...). The default is the compute capability of the
126
+ current device.
127
+
128
+ Returns:
129
+ The compiled device code as a bytes object.
130
+ """
131
+
132
+ # TODO: any type supported by numba-cuda can be provided.
133
+ if dtype not in VALID_DTYPES:
134
+ raise ValueError(f"The dtype '{dtype}' is invalid. It must one of {VALID_DTYPES}.")
135
+
136
+ ltoir = compile_python_function(add, "mul", (dtype, dtype, dtype), compute_capability=compute_capability)
137
+ return ltoir
@@ -0,0 +1,21 @@
1
+ # Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ __all__ = [
6
+ "default_prolog",
7
+ ]
8
+
9
+
10
+ def default_prolog(multiplier, *, is_conjugate):
11
+ if is_conjugate:
12
+
13
+ def prolog(a):
14
+ return multiplier * a.conjugate()
15
+
16
+ return prolog
17
+
18
+ def prolog(a):
19
+ return multiplier * a
20
+
21
+ return prolog