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,1029 @@
1
+ # Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ from enum import Enum
6
+ from typing import Literal, NamedTuple
7
+
8
+ from nvmath.device import (
9
+ CholeskySolver,
10
+ LeastSquaresSolver,
11
+ LQFactorize,
12
+ LQMultiply,
13
+ LUPivotSolver,
14
+ LUSolver,
15
+ QRFactorize,
16
+ QRMultiply,
17
+ TriangularSolver,
18
+ )
19
+ from nvmath.device.cusolverdx_backend import _ENABLE_CUSOLVERDX_0_3
20
+
21
+ # ==========================
22
+ # Data: Solver Configuration
23
+ # ==========================
24
+
25
+ _SOLVER_DEFINITION_ARGS = [
26
+ "function",
27
+ "size",
28
+ "precision",
29
+ "execution",
30
+ "sm",
31
+ "arrangement",
32
+ "transpose_mode",
33
+ "side",
34
+ "diag",
35
+ "fill_mode",
36
+ "batches_per_block",
37
+ "data_type",
38
+ "leading_dimensions",
39
+ "block_dim",
40
+ ]
41
+
42
+ _SOLVER_PROPS = [
43
+ "value_type",
44
+ "m",
45
+ "n",
46
+ "k",
47
+ "a_arrangement",
48
+ "b_arrangement",
49
+ "lda",
50
+ "ldb",
51
+ "info_type",
52
+ "ipiv_type",
53
+ "tau_type",
54
+ "block_size",
55
+ ]
56
+
57
+ if _ENABLE_CUSOLVERDX_0_3:
58
+ _SOLVER_PROPS.append("workspace_size")
59
+ _SOLVER_DEFINITION_ARGS.append("job")
60
+
61
+ # ==========================
62
+ # Dispatch Data Structures
63
+ # ==========================
64
+
65
+
66
+ class _ArgType(str, Enum):
67
+ value_type_ptr = "value_type_ptr"
68
+ precision_type_ptr = "precision_type_ptr"
69
+ integer_value = "integer_value"
70
+ int32_ptr = "int32_ptr"
71
+
72
+
73
+ class _Arg(NamedTuple):
74
+ arg_type: _ArgType
75
+ name: str
76
+
77
+
78
+ class _Signature(NamedTuple):
79
+ api: Literal["compiled_leading_dim"] | Literal["runtime_leading_dim"] # libmathdx API variant
80
+ args: list[_Arg] # List of expected arguments for the function
81
+
82
+
83
+ class _FunctionSignatures(NamedTuple):
84
+ function: str
85
+ signatures: list[_Signature]
86
+
87
+
88
+ # ==========================
89
+ # Dispatch Data: Function Signatures Registry
90
+ # ==========================
91
+
92
+ """
93
+ _DISPATCH_DATA contains the dispatch information for different solver functions.
94
+ """
95
+ _DISPATCH_DATA = [
96
+ _FunctionSignatures(
97
+ function="potrs",
98
+ signatures=[
99
+ _Signature(
100
+ api="compiled_leading_dim",
101
+ args=[
102
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
103
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
104
+ ],
105
+ ),
106
+ _Signature(
107
+ api="runtime_leading_dim",
108
+ args=[
109
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
110
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
111
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
112
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
113
+ ],
114
+ ),
115
+ ],
116
+ ),
117
+ _FunctionSignatures(
118
+ function="getrs_no_pivot",
119
+ signatures=[
120
+ _Signature(
121
+ api="compiled_leading_dim",
122
+ args=[
123
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
124
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
125
+ ],
126
+ ),
127
+ _Signature(
128
+ api="runtime_leading_dim",
129
+ args=[
130
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
131
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
132
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
133
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
134
+ ],
135
+ ),
136
+ ],
137
+ ),
138
+ _FunctionSignatures(
139
+ function="gels",
140
+ signatures=[
141
+ _Signature(
142
+ api="compiled_leading_dim",
143
+ args=[
144
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
145
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
146
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
147
+ ],
148
+ ),
149
+ _Signature(
150
+ api="runtime_leading_dim",
151
+ args=[
152
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
153
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
154
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
155
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
156
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
157
+ ],
158
+ ),
159
+ ],
160
+ ),
161
+ _FunctionSignatures(
162
+ function="trsm",
163
+ signatures=[
164
+ _Signature(
165
+ api="compiled_leading_dim",
166
+ args=[
167
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
168
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
169
+ ],
170
+ ),
171
+ _Signature(
172
+ api="runtime_leading_dim",
173
+ args=[
174
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
175
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
176
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
177
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
178
+ ],
179
+ ),
180
+ ],
181
+ ),
182
+ _FunctionSignatures(
183
+ function="geqrf",
184
+ signatures=[
185
+ _Signature(
186
+ api="compiled_leading_dim",
187
+ args=[
188
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
189
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
190
+ ],
191
+ ),
192
+ _Signature(
193
+ api="runtime_leading_dim",
194
+ args=[
195
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
196
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
197
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
198
+ ],
199
+ ),
200
+ ],
201
+ ),
202
+ _FunctionSignatures(
203
+ function="gelqf",
204
+ signatures=[
205
+ _Signature(
206
+ api="compiled_leading_dim",
207
+ args=[
208
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
209
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
210
+ ],
211
+ ),
212
+ _Signature(
213
+ api="runtime_leading_dim",
214
+ args=[
215
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
216
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
217
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
218
+ ],
219
+ ),
220
+ ],
221
+ ),
222
+ _FunctionSignatures(
223
+ function="unmqr",
224
+ signatures=[
225
+ _Signature(
226
+ api="compiled_leading_dim",
227
+ args=[
228
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
229
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
230
+ _Arg(arg_type=_ArgType.value_type_ptr, name="c"),
231
+ ],
232
+ ),
233
+ _Signature(
234
+ api="runtime_leading_dim",
235
+ args=[
236
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
237
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
238
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
239
+ _Arg(arg_type=_ArgType.value_type_ptr, name="c"),
240
+ _Arg(arg_type=_ArgType.integer_value, name="ldc"),
241
+ ],
242
+ ),
243
+ ],
244
+ ),
245
+ _FunctionSignatures(
246
+ function="unmlq",
247
+ signatures=[
248
+ _Signature(
249
+ api="compiled_leading_dim",
250
+ args=[
251
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
252
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
253
+ _Arg(arg_type=_ArgType.value_type_ptr, name="c"),
254
+ ],
255
+ ),
256
+ _Signature(
257
+ api="runtime_leading_dim",
258
+ args=[
259
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
260
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
261
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
262
+ _Arg(arg_type=_ArgType.value_type_ptr, name="c"),
263
+ _Arg(arg_type=_ArgType.integer_value, name="ldc"),
264
+ ],
265
+ ),
266
+ ],
267
+ ),
268
+ _FunctionSignatures(
269
+ function="potrf",
270
+ signatures=[
271
+ _Signature(
272
+ api="compiled_leading_dim",
273
+ args=[
274
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
275
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
276
+ ],
277
+ ),
278
+ _Signature(
279
+ api="runtime_leading_dim",
280
+ args=[
281
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
282
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
283
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
284
+ ],
285
+ ),
286
+ ],
287
+ ),
288
+ _FunctionSignatures(
289
+ function="getrf_no_pivot",
290
+ signatures=[
291
+ _Signature(
292
+ api="compiled_leading_dim",
293
+ args=[
294
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
295
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
296
+ ],
297
+ ),
298
+ _Signature(
299
+ api="runtime_leading_dim",
300
+ args=[
301
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
302
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
303
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
304
+ ],
305
+ ),
306
+ ],
307
+ ),
308
+ _FunctionSignatures(
309
+ function="getrf_partial_pivot",
310
+ signatures=[
311
+ _Signature(
312
+ api="compiled_leading_dim",
313
+ args=[
314
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
315
+ _Arg(arg_type=_ArgType.int32_ptr, name="ipiv"),
316
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
317
+ ],
318
+ ),
319
+ _Signature(
320
+ api="runtime_leading_dim",
321
+ args=[
322
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
323
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
324
+ _Arg(arg_type=_ArgType.int32_ptr, name="ipiv"),
325
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
326
+ ],
327
+ ),
328
+ ],
329
+ ),
330
+ _FunctionSignatures(
331
+ function="getrs_partial_pivot",
332
+ signatures=[
333
+ _Signature(
334
+ api="compiled_leading_dim",
335
+ args=[
336
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
337
+ _Arg(arg_type=_ArgType.int32_ptr, name="ipiv"),
338
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
339
+ ],
340
+ ),
341
+ _Signature(
342
+ api="runtime_leading_dim",
343
+ args=[
344
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
345
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
346
+ _Arg(arg_type=_ArgType.int32_ptr, name="ipiv"),
347
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
348
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
349
+ ],
350
+ ),
351
+ ],
352
+ ),
353
+ _FunctionSignatures(
354
+ function="posv",
355
+ signatures=[
356
+ _Signature(
357
+ api="compiled_leading_dim",
358
+ args=[
359
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
360
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
361
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
362
+ ],
363
+ ),
364
+ _Signature(
365
+ api="runtime_leading_dim",
366
+ args=[
367
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
368
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
369
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
370
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
371
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
372
+ ],
373
+ ),
374
+ ],
375
+ ),
376
+ _FunctionSignatures(
377
+ function="gesv_no_pivot",
378
+ signatures=[
379
+ _Signature(
380
+ api="compiled_leading_dim",
381
+ args=[
382
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
383
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
384
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
385
+ ],
386
+ ),
387
+ _Signature(
388
+ api="runtime_leading_dim",
389
+ args=[
390
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
391
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
392
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
393
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
394
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
395
+ ],
396
+ ),
397
+ ],
398
+ ),
399
+ _FunctionSignatures(
400
+ function="gesv_partial_pivot",
401
+ signatures=[
402
+ _Signature(
403
+ api="compiled_leading_dim",
404
+ args=[
405
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
406
+ _Arg(arg_type=_ArgType.int32_ptr, name="ipiv"),
407
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
408
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
409
+ ],
410
+ ),
411
+ _Signature(
412
+ api="runtime_leading_dim",
413
+ args=[
414
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
415
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
416
+ _Arg(arg_type=_ArgType.int32_ptr, name="ipiv"),
417
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
418
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
419
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
420
+ ],
421
+ ),
422
+ ],
423
+ ),
424
+ ]
425
+
426
+ _DISPATCH_DATA_CUSOLVERDX_0_3 = [
427
+ _FunctionSignatures(
428
+ function="gtsv_no_pivot",
429
+ signatures=[
430
+ _Signature(
431
+ api="compiled_leading_dim",
432
+ args=[
433
+ _Arg(arg_type=_ArgType.value_type_ptr, name="dl"),
434
+ _Arg(arg_type=_ArgType.value_type_ptr, name="d"),
435
+ _Arg(arg_type=_ArgType.value_type_ptr, name="du"),
436
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
437
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
438
+ ],
439
+ ),
440
+ _Signature(
441
+ api="runtime_leading_dim",
442
+ args=[
443
+ _Arg(arg_type=_ArgType.value_type_ptr, name="dl"),
444
+ _Arg(arg_type=_ArgType.value_type_ptr, name="d"),
445
+ _Arg(arg_type=_ArgType.value_type_ptr, name="du"),
446
+ _Arg(arg_type=_ArgType.value_type_ptr, name="b"),
447
+ _Arg(arg_type=_ArgType.integer_value, name="ldb"),
448
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
449
+ ],
450
+ ),
451
+ ],
452
+ ),
453
+ _FunctionSignatures(
454
+ function="htev",
455
+ signatures=[
456
+ _Signature(
457
+ api="compiled_leading_dim",
458
+ args=[
459
+ _Arg(arg_type=_ArgType.value_type_ptr, name="d"),
460
+ _Arg(arg_type=_ArgType.value_type_ptr, name="e"),
461
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
462
+ ],
463
+ ),
464
+ _Signature(
465
+ api="compiled_leading_dim",
466
+ args=[
467
+ _Arg(arg_type=_ArgType.value_type_ptr, name="d"),
468
+ _Arg(arg_type=_ArgType.value_type_ptr, name="e"),
469
+ _Arg(arg_type=_ArgType.value_type_ptr, name="V"),
470
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
471
+ ],
472
+ ),
473
+ _Signature(
474
+ api="runtime_leading_dim",
475
+ args=[
476
+ _Arg(arg_type=_ArgType.value_type_ptr, name="d"),
477
+ _Arg(arg_type=_ArgType.value_type_ptr, name="e"),
478
+ _Arg(arg_type=_ArgType.value_type_ptr, name="V"),
479
+ _Arg(arg_type=_ArgType.integer_value, name="ldv"),
480
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
481
+ ],
482
+ ),
483
+ ],
484
+ ),
485
+ _FunctionSignatures(
486
+ function="heev",
487
+ signatures=[
488
+ _Signature(
489
+ api="compiled_leading_dim",
490
+ args=[
491
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
492
+ _Arg(arg_type=_ArgType.precision_type_ptr, name="lambda"),
493
+ _Arg(arg_type=_ArgType.value_type_ptr, name="workspace"),
494
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
495
+ ],
496
+ ),
497
+ _Signature(
498
+ api="runtime_leading_dim",
499
+ args=[
500
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
501
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
502
+ _Arg(arg_type=_ArgType.precision_type_ptr, name="lambda"),
503
+ _Arg(arg_type=_ArgType.value_type_ptr, name="workspace"),
504
+ _Arg(arg_type=_ArgType.int32_ptr, name="info"),
505
+ ],
506
+ ),
507
+ ],
508
+ ),
509
+ _FunctionSignatures(
510
+ function="ungqr",
511
+ signatures=[
512
+ _Signature(
513
+ api="compiled_leading_dim",
514
+ args=[
515
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
516
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
517
+ ],
518
+ ),
519
+ _Signature(
520
+ api="runtime_leading_dim",
521
+ args=[
522
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
523
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
524
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
525
+ ],
526
+ ),
527
+ ],
528
+ ),
529
+ _FunctionSignatures(
530
+ function="unglq",
531
+ signatures=[
532
+ _Signature(
533
+ api="compiled_leading_dim",
534
+ args=[
535
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
536
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
537
+ ],
538
+ ),
539
+ _Signature(
540
+ api="runtime_leading_dim",
541
+ args=[
542
+ _Arg(arg_type=_ArgType.value_type_ptr, name="a"),
543
+ _Arg(arg_type=_ArgType.integer_value, name="lda"),
544
+ _Arg(arg_type=_ArgType.value_type_ptr, name="tau"),
545
+ ],
546
+ ),
547
+ ],
548
+ ),
549
+ ]
550
+
551
+ if _ENABLE_CUSOLVERDX_0_3:
552
+ _DISPATCH_DATA += _DISPATCH_DATA_CUSOLVERDX_0_3
553
+
554
+
555
+ def _get_function_signatures(function: str) -> list[_Signature] | None:
556
+ """Looks up and returns the list of available signatures for a given function."""
557
+ for func_signature in _DISPATCH_DATA:
558
+ if func_signature.function == function:
559
+ return func_signature.signatures
560
+
561
+ return None
562
+
563
+
564
+ # ==========================
565
+ # User API dispatch
566
+ # =========================
567
+
568
+
569
+ class _UserApiDispatchFactory(str, Enum):
570
+ solve_factory = "solve_factory"
571
+ factorize_factory = "factorize_factory"
572
+ triangular_solve_factory = "triangular_solve_factory"
573
+ factorize_pivot_factory = "factorize_pivot_factory"
574
+ solve_pivot_factory = "solve_pivot_factory"
575
+ orthogonal_multiply_factory = "orthogonal_multiply_factory"
576
+ least_squares_solve_factory = "least_squares_solve_factory"
577
+
578
+
579
+ class _UserApiSolverDispatch(NamedTuple):
580
+ method: str # name of the method to overload
581
+ factory: _UserApiDispatchFactory
582
+ solver_attr: str # name of the solver attribute to forward execution to
583
+ expected_lds: list[Literal["lda", "ldb", "ldc"]] # list of expected leading dimensions
584
+
585
+
586
+ class _UserApiDeviceMethod(str, Enum):
587
+ a_strides = "a_strides"
588
+ b_strides = "b_strides"
589
+ c_strides = "c_strides"
590
+ bx_strides = "bx_strides"
591
+ a_size = "a_size"
592
+ b_size = "b_size"
593
+ c_size = "c_size"
594
+ bx_size = "bx_size"
595
+
596
+
597
+ class _UserApiSpec(NamedTuple):
598
+ user_api_class: type
599
+ definition_args: list[str]
600
+ helpers_prop: list[str]
601
+ solver_dispath_methods: list[_UserApiSolverDispatch]
602
+ device_methods: list[_UserApiDeviceMethod]
603
+
604
+
605
+ # ==========================
606
+ # Common solve configs
607
+ # ==========================
608
+
609
+ _BASIC_SOLVER_DISPATCH_METHODS = [
610
+ _UserApiSolverDispatch(
611
+ method="factorize",
612
+ solver_attr="_factorize",
613
+ expected_lds=["lda"],
614
+ factory=_UserApiDispatchFactory.factorize_factory,
615
+ ),
616
+ _UserApiSolverDispatch(
617
+ method="solve",
618
+ solver_attr="_solve",
619
+ expected_lds=["lda", "ldb"],
620
+ factory=_UserApiDispatchFactory.solve_factory,
621
+ ),
622
+ ]
623
+
624
+ _BASIC_SOLVER_DEVICE_METHODS = [
625
+ _UserApiDeviceMethod.a_strides,
626
+ _UserApiDeviceMethod.b_strides,
627
+ _UserApiDeviceMethod.a_size,
628
+ _UserApiDeviceMethod.b_size,
629
+ ]
630
+
631
+
632
+ # ==========================
633
+ # Cholesky Solver
634
+ # ==========================
635
+
636
+ _CHOLESKY_SOLVER_DEFINITION_ARGS = [
637
+ "size",
638
+ "precision",
639
+ "execution",
640
+ "sm",
641
+ "arrangement",
642
+ "fill_mode",
643
+ "batches_per_block",
644
+ "data_type",
645
+ "leading_dimensions",
646
+ "block_dim",
647
+ ]
648
+
649
+ _CHOLESKY_SOLVER_PROPS = [
650
+ "value_type",
651
+ "m",
652
+ "n",
653
+ "k",
654
+ "a_arrangement",
655
+ "b_arrangement",
656
+ "lda",
657
+ "ldb",
658
+ "block_size",
659
+ "info_type",
660
+ "info_shape",
661
+ "info_strides",
662
+ "a_shape",
663
+ "b_shape",
664
+ ]
665
+
666
+ _CHOLESKY_USER_API_SPEC = _UserApiSpec(
667
+ CholeskySolver,
668
+ _CHOLESKY_SOLVER_DEFINITION_ARGS,
669
+ _CHOLESKY_SOLVER_PROPS,
670
+ _BASIC_SOLVER_DISPATCH_METHODS,
671
+ _BASIC_SOLVER_DEVICE_METHODS,
672
+ )
673
+
674
+ # ==========================
675
+ # LU Solver
676
+ # ==========================
677
+
678
+ _LU_SOLVER_DEFINITION_ARGS = [
679
+ "size",
680
+ "precision",
681
+ "execution",
682
+ "sm",
683
+ "arrangement",
684
+ "transpose_mode",
685
+ "batches_per_block",
686
+ "data_type",
687
+ "leading_dimensions",
688
+ "block_dim",
689
+ ]
690
+
691
+ _LU_SOLVER_PROPS = [
692
+ "value_type",
693
+ "m",
694
+ "n",
695
+ "k",
696
+ "a_arrangement",
697
+ "b_arrangement",
698
+ "lda",
699
+ "ldb",
700
+ "block_size",
701
+ "info_type",
702
+ "info_shape",
703
+ "info_strides",
704
+ "a_shape",
705
+ "b_shape",
706
+ ]
707
+
708
+ _LU_USER_API_SPEC = _UserApiSpec(
709
+ LUSolver,
710
+ _LU_SOLVER_DEFINITION_ARGS,
711
+ _LU_SOLVER_PROPS,
712
+ _BASIC_SOLVER_DISPATCH_METHODS,
713
+ _BASIC_SOLVER_DEVICE_METHODS,
714
+ )
715
+
716
+ # ==========================
717
+ # Triangular Solver
718
+ # ==========================
719
+
720
+ _TRIANGULAR_SOLVER_DEFINITION_ARGS = [
721
+ "size",
722
+ "precision",
723
+ "execution",
724
+ "sm",
725
+ "side",
726
+ "fill_mode",
727
+ "diag",
728
+ "transpose_mode",
729
+ "arrangement",
730
+ "batches_per_block",
731
+ "data_type",
732
+ "leading_dimensions",
733
+ ]
734
+
735
+ _TRIANGULAR_SOLVER_PROPS = [
736
+ "block_dim",
737
+ "value_type",
738
+ "m",
739
+ "n",
740
+ "k",
741
+ "a_arrangement",
742
+ "b_arrangement",
743
+ "lda",
744
+ "ldb",
745
+ "block_size",
746
+ "a_shape",
747
+ "b_shape",
748
+ ]
749
+
750
+ _TRIANGULAR_SOLVER_DISPATCH_METHODS = [
751
+ _UserApiSolverDispatch(
752
+ method="solve",
753
+ solver_attr="_solve",
754
+ factory=_UserApiDispatchFactory.triangular_solve_factory,
755
+ expected_lds=["lda", "ldb"],
756
+ ),
757
+ ]
758
+
759
+ _TRIANGULAR_SOLVER_USER_API_SPEC = _UserApiSpec(
760
+ TriangularSolver,
761
+ _TRIANGULAR_SOLVER_DEFINITION_ARGS,
762
+ _TRIANGULAR_SOLVER_PROPS,
763
+ _TRIANGULAR_SOLVER_DISPATCH_METHODS,
764
+ _BASIC_SOLVER_DEVICE_METHODS,
765
+ )
766
+
767
+ # ==========================
768
+ # LU Pivot Solver
769
+ # ==========================
770
+
771
+ _LU_PIVOT_SOLVER_DEFINITION_ARGS = [
772
+ "size",
773
+ "precision",
774
+ "execution",
775
+ "sm",
776
+ "arrangement",
777
+ "transpose_mode",
778
+ "batches_per_block",
779
+ "data_type",
780
+ "leading_dimensions",
781
+ "block_dim",
782
+ ]
783
+
784
+ _LU_PIVOT_SOLVER_PROPS = [
785
+ "block_size",
786
+ "value_type",
787
+ "m",
788
+ "n",
789
+ "k",
790
+ "a_arrangement",
791
+ "b_arrangement",
792
+ "lda",
793
+ "ldb",
794
+ "info_type",
795
+ "info_shape",
796
+ "info_strides",
797
+ "ipiv_type",
798
+ "ipiv_size",
799
+ "ipiv_shape",
800
+ "ipiv_strides",
801
+ "a_shape",
802
+ "b_shape",
803
+ ]
804
+
805
+ _LU_PIVOT_SOLVER_DISPATCH_METHODS = [
806
+ _UserApiSolverDispatch(
807
+ method="factorize",
808
+ solver_attr="_factorize",
809
+ factory=_UserApiDispatchFactory.factorize_pivot_factory,
810
+ expected_lds=["lda"],
811
+ ),
812
+ _UserApiSolverDispatch(
813
+ method="solve",
814
+ solver_attr="_solve",
815
+ factory=_UserApiDispatchFactory.solve_pivot_factory,
816
+ expected_lds=["lda", "ldb"],
817
+ ),
818
+ ]
819
+
820
+ _LU_PIVOT_SOLVER_USER_API_SPEC = _UserApiSpec(
821
+ LUPivotSolver,
822
+ _LU_PIVOT_SOLVER_DEFINITION_ARGS,
823
+ _LU_PIVOT_SOLVER_PROPS,
824
+ _LU_PIVOT_SOLVER_DISPATCH_METHODS,
825
+ _BASIC_SOLVER_DEVICE_METHODS,
826
+ )
827
+
828
+ # ==========================
829
+ # QRFactors
830
+ # ==========================
831
+
832
+ _QR_FACTORS_DEFINITION_ARGS = [
833
+ "size",
834
+ "precision",
835
+ "execution",
836
+ "sm",
837
+ "batches_per_block",
838
+ "data_type",
839
+ "block_dim",
840
+ "a_arrangement",
841
+ "lda",
842
+ ]
843
+
844
+ _QR_FACTORS_PROPS = [
845
+ "value_type",
846
+ "m",
847
+ "n",
848
+ "block_size",
849
+ "tau_type",
850
+ "tau_size",
851
+ "tau_shape",
852
+ "tau_strides",
853
+ "a_shape",
854
+ ]
855
+
856
+ _QR_FACTORS_DISPATCH_METHODS = [
857
+ _UserApiSolverDispatch(
858
+ method="factorize",
859
+ solver_attr="_factorize",
860
+ factory=_UserApiDispatchFactory.factorize_factory,
861
+ expected_lds=["lda"],
862
+ ),
863
+ ]
864
+
865
+ _QR_FACTORS_DEVICE_METHODS = [
866
+ _UserApiDeviceMethod.a_strides,
867
+ _UserApiDeviceMethod.a_size,
868
+ ]
869
+
870
+ _QR_FACTORIZE_USER_API_SPEC = _UserApiSpec(
871
+ QRFactorize,
872
+ _QR_FACTORS_DEFINITION_ARGS,
873
+ _QR_FACTORS_PROPS,
874
+ _QR_FACTORS_DISPATCH_METHODS,
875
+ _QR_FACTORS_DEVICE_METHODS,
876
+ )
877
+
878
+ _LQ_FACTORIZE_USER_API_SPEC = _UserApiSpec(
879
+ LQFactorize,
880
+ _QR_FACTORS_DEFINITION_ARGS,
881
+ _QR_FACTORS_PROPS,
882
+ _QR_FACTORS_DISPATCH_METHODS,
883
+ _QR_FACTORS_DEVICE_METHODS,
884
+ )
885
+
886
+ # ==========================
887
+ # Orthogonal Multiply
888
+ # ==========================
889
+
890
+ _ORTHOGONAL_MULTIPLY_DEFINITION_ARGS = [
891
+ "size",
892
+ "precision",
893
+ "execution",
894
+ "sm",
895
+ "arrangement",
896
+ "batches_per_block",
897
+ "data_type",
898
+ "leading_dimensions",
899
+ "block_dim",
900
+ "transpose_mode",
901
+ "side",
902
+ ]
903
+
904
+ _ORTHOGONAL_MULTIPLY_PROPS = [
905
+ "value_type",
906
+ "m",
907
+ "n",
908
+ "k",
909
+ "a_arrangement",
910
+ "b_arrangement",
911
+ "lda",
912
+ "ldb",
913
+ "block_size",
914
+ "tau_type",
915
+ "tau_size",
916
+ "tau_shape",
917
+ "tau_strides",
918
+ "a_shape",
919
+ "c_shape",
920
+ ]
921
+
922
+ _QR_MULTIPLY_DISPATCH_METHODS = [
923
+ _UserApiSolverDispatch(
924
+ method="multiply",
925
+ solver_attr="_multiply",
926
+ factory=_UserApiDispatchFactory.orthogonal_multiply_factory,
927
+ expected_lds=["lda", "ldc"],
928
+ ),
929
+ ]
930
+
931
+ _QR_MULTIPLY_DEVICE_METHODS = [
932
+ _UserApiDeviceMethod.a_strides,
933
+ _UserApiDeviceMethod.a_size,
934
+ _UserApiDeviceMethod.c_strides,
935
+ _UserApiDeviceMethod.c_size,
936
+ ]
937
+
938
+ _QR_MULTIPLY_USER_API_SPEC = _UserApiSpec(
939
+ QRMultiply,
940
+ _ORTHOGONAL_MULTIPLY_DEFINITION_ARGS,
941
+ _ORTHOGONAL_MULTIPLY_PROPS,
942
+ _QR_MULTIPLY_DISPATCH_METHODS,
943
+ _QR_MULTIPLY_DEVICE_METHODS,
944
+ )
945
+
946
+ _LQ_MULTIPLY_USER_API_SPEC = _UserApiSpec(
947
+ LQMultiply,
948
+ _ORTHOGONAL_MULTIPLY_DEFINITION_ARGS,
949
+ _ORTHOGONAL_MULTIPLY_PROPS,
950
+ _QR_MULTIPLY_DISPATCH_METHODS,
951
+ _QR_MULTIPLY_DEVICE_METHODS,
952
+ )
953
+
954
+ # ==========================
955
+ # Least Squares Solver
956
+ # ==========================
957
+
958
+ _LEAST_SQUARES_SOLVER_DEFINITION_ARGS = [
959
+ "size",
960
+ "precision",
961
+ "execution",
962
+ "sm",
963
+ "arrangement",
964
+ "transpose_mode",
965
+ "batches_per_block",
966
+ "data_type",
967
+ "leading_dimensions",
968
+ "block_dim",
969
+ ]
970
+
971
+ _LEAST_SQUARES_SOLVER_PROPS = [
972
+ "value_type",
973
+ "m",
974
+ "n",
975
+ "k",
976
+ "a_arrangement",
977
+ "b_arrangement",
978
+ "lda",
979
+ "ldb",
980
+ "block_size",
981
+ "tau_type",
982
+ "tau_size",
983
+ "tau_shape",
984
+ "tau_strides",
985
+ "a_shape",
986
+ "b_shape",
987
+ "x_shape",
988
+ ]
989
+
990
+ _LEAST_SQUARES_SOLVER_DISPATCH_METHODS = [
991
+ _UserApiSolverDispatch(
992
+ method="solve",
993
+ solver_attr="_solve",
994
+ factory=_UserApiDispatchFactory.least_squares_solve_factory,
995
+ expected_lds=["lda", "ldb"],
996
+ ),
997
+ ]
998
+
999
+ _LEAST_SQUARES_SOLVER_DEVICE_METHODS = [
1000
+ _UserApiDeviceMethod.a_strides,
1001
+ _UserApiDeviceMethod.a_size,
1002
+ _UserApiDeviceMethod.bx_strides,
1003
+ _UserApiDeviceMethod.bx_size,
1004
+ ]
1005
+
1006
+ _LEAST_SQUARES_SOLVER_SPEC = _UserApiSpec(
1007
+ LeastSquaresSolver,
1008
+ _LEAST_SQUARES_SOLVER_DEFINITION_ARGS,
1009
+ _LEAST_SQUARES_SOLVER_PROPS,
1010
+ _LEAST_SQUARES_SOLVER_DISPATCH_METHODS,
1011
+ _LEAST_SQUARES_SOLVER_DEVICE_METHODS,
1012
+ )
1013
+
1014
+
1015
+ # ==========================
1016
+ # User API disptach list
1017
+ # ==========================
1018
+
1019
+ _USER_API_DISPATCH_SPECS = [
1020
+ _CHOLESKY_USER_API_SPEC,
1021
+ _LU_USER_API_SPEC,
1022
+ _TRIANGULAR_SOLVER_USER_API_SPEC,
1023
+ _LU_PIVOT_SOLVER_USER_API_SPEC,
1024
+ _QR_FACTORIZE_USER_API_SPEC,
1025
+ _LQ_FACTORIZE_USER_API_SPEC,
1026
+ _QR_MULTIPLY_USER_API_SPEC,
1027
+ _LQ_MULTIPLY_USER_API_SPEC,
1028
+ _LEAST_SQUARES_SOLVER_SPEC,
1029
+ ]