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,702 @@
1
+ # Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.
2
+ #
3
+ # SPDX-License-Identifier: Apache-2.0
4
+
5
+ """
6
+ Interface classes to encapsulate low-level calls to get or set configuration information.
7
+ """
8
+
9
+ __all__ = ["FactorizationConfig", "PlanConfig", "SolutionConfig"]
10
+
11
+ import re
12
+ import threading
13
+ from typing import TypeAlias
14
+
15
+ import numpy as np
16
+
17
+ from nvmath.bindings import cudss
18
+ from nvmath.internal import utils
19
+
20
+ ConfigParamEnum: TypeAlias = cudss.ConfigParam
21
+
22
+ # Future-proofing - cuDSS is currently not thread-safe.
23
+ # https://docs.nvidia.com/cuda/cudss/general.html#thread-safety
24
+ _tls = threading.local()
25
+ _tls.size_written = np.empty((1,), dtype=np.uint64)
26
+
27
+
28
+ def _get_scalar_attribute(config_ptr, name, attribute):
29
+ """
30
+ name = cudss enumerator for the attribute.
31
+ attribute = numpy ndarray object into which the value is stored.
32
+ """
33
+ cudss.config_get(config_ptr, name, attribute.ctypes.data, attribute.dtype.itemsize, _tls.size_written.ctypes.data)
34
+ assert _tls.size_written[0] <= attribute.dtype.itemsize, "Internal error."
35
+
36
+
37
+ def _set_scalar_attribute(config_ptr, name, attribute, value):
38
+ """
39
+ name = cudss enumerator for the attribute.
40
+ attribute = numpy ndarray object into which the value is stored.
41
+ value = the value to set the attribute to.
42
+ """
43
+ attribute[0] = value
44
+ cudss.config_set(config_ptr, name, attribute.ctypes.data, attribute.dtype.itemsize)
45
+
46
+
47
+ def _check_valid_solver(config):
48
+ """
49
+ Check if the configuration points to a valid DirectSolver object.
50
+ """
51
+ if not config._solver.valid_state:
52
+ m = re.match(r"<nvmath\..*\.(.*Config) object at (.*)>$", str(config))
53
+ assert m is not None, "Internal error."
54
+ name = m.group(1)
55
+ address = m.group(2)
56
+
57
+ raise RuntimeError(f"The {name} object at {address} cannot be used after its solver object is free'd.")
58
+
59
+
60
+ # TODO: Set user permutation as part of PlanConfig, even though it sets the data object.
61
+ class PlanConfig:
62
+ """
63
+ An interface to configure :meth:`nvmath.sparse.advanced.DirectSolver.plan`. The
64
+ current configuration can also be queried.
65
+ """
66
+
67
+ __slots__ = (
68
+ "_solver",
69
+ "_config_ptr",
70
+ "_host_nthreads",
71
+ "_reordering_alg",
72
+ "_pivot_type",
73
+ "_pivot_threshold",
74
+ "_max_lu_nnz",
75
+ "_matching_alg",
76
+ "_nd_nlevels",
77
+ "_use_superpanels",
78
+ )
79
+
80
+ def __init__(self, solver):
81
+ """
82
+ ctor for internal use only.
83
+ """
84
+ self._solver = solver
85
+ self._config_ptr = self._solver.config_ptr
86
+ assert self._config_ptr is not None, "Internal error"
87
+
88
+ get_dtype = cudss.get_config_param_dtype
89
+
90
+ self._host_nthreads = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.HOST_NTHREADS))
91
+ self._reordering_alg = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.REORDERING_ALG))
92
+ self._pivot_type = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.PIVOT_TYPE))
93
+ self._pivot_threshold = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.PIVOT_THRESHOLD))
94
+ self._max_lu_nnz = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.MAX_LU_NNZ))
95
+ self._matching_alg = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.MATCHING_ALG))
96
+ self._nd_nlevels = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.ND_NLEVELS))
97
+ self._use_superpanels = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.USE_SUPERPANELS))
98
+
99
+ def _check_valid_solver_wrapper(self, *args, **kwargs):
100
+ _check_valid_solver(self)
101
+
102
+ @property
103
+ @utils.precondition(_check_valid_solver_wrapper)
104
+ def host_nthreads(self):
105
+ """
106
+ Query or set the number of host threads. See the
107
+ `cuDSS documentation
108
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
109
+ for more information.
110
+ """
111
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.HOST_NTHREADS, self._host_nthreads)
112
+
113
+ return self._host_nthreads.item()
114
+
115
+ @host_nthreads.setter
116
+ @utils.precondition(_check_valid_solver_wrapper)
117
+ def host_nthreads(self, nthreads):
118
+ """
119
+ Set the number of host threads. See the
120
+ `cuDSS documentation
121
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
122
+ for more information.
123
+
124
+ Args:
125
+ nthreads: The number of host threads as Python `int`.
126
+
127
+ """
128
+ if not self._solver.multithreading:
129
+ raise ValueError(
130
+ "The number of host threads cannot be set if a multithreading library was not provided during problem \
131
+ specification."
132
+ )
133
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.HOST_NTHREADS, self._host_nthreads, nthreads)
134
+
135
+ @property
136
+ @utils.precondition(_check_valid_solver_wrapper)
137
+ def reordering_algorithm(self):
138
+ """
139
+ Query or set the reordering algorithm used. See
140
+ :class:`nvmath.bindings.cudss.ReorderingAlg` and the `cuDSS documentation
141
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
142
+ information.
143
+ """
144
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.REORDERING_ALG, self._reordering_alg)
145
+
146
+ return cudss.ReorderingAlg(self._reordering_alg.item())
147
+
148
+ @reordering_algorithm.setter
149
+ @utils.precondition(_check_valid_solver_wrapper)
150
+ def reordering_algorithm(self, algorithm):
151
+ """
152
+ Set the reordering algorithm to use. See
153
+ :class:`nvmath.bindings.cudss.ReorderingAlg` and the `cuDSS documentation
154
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
155
+ information.
156
+
157
+ Args:
158
+ algorithm: The reordering algorithm of type
159
+ :class:`nvmath.bindings.cudss.ReorderingAlg` or Python `int`.
160
+
161
+ """
162
+ algorithm = cudss.ReorderingAlg(algorithm)
163
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.REORDERING_ALG, self._reordering_alg, algorithm)
164
+
165
+ @property
166
+ @utils.precondition(_check_valid_solver_wrapper)
167
+ def matching_algorithm(self):
168
+ """
169
+ Query or set the matching algorithm used. See
170
+ :class:`nvmath.bindings.cudss.MatchingAlg` and the `cuDSS documentation
171
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
172
+ information.
173
+ """
174
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.MATCHING_ALG, self._matching_alg)
175
+
176
+ return cudss.MatchingAlg(self._matching_alg.item())
177
+
178
+ @matching_algorithm.setter
179
+ @utils.precondition(_check_valid_solver_wrapper)
180
+ def matching_algorithm(self, algorithm):
181
+ """
182
+ Set the matching algorithm to use. See
183
+ :class:`nvmath.bindings.cudss.MatchingAlg` and the `cuDSS documentation
184
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
185
+ information.
186
+
187
+ Args:
188
+ algorithm: The matching algorithm of type
189
+ :class:`nvmath.bindings.cudss.MatchingAlg` or Python `int`.
190
+
191
+ """
192
+ algorithm = cudss.MatchingAlg(algorithm)
193
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.MATCHING_ALG, self._matching_alg, algorithm)
194
+
195
+ @property
196
+ @utils.precondition(_check_valid_solver_wrapper)
197
+ def pivot_type(self):
198
+ """
199
+ Query or set the type of pivoting. See
200
+ :class:`nvmath.bindings.cudss.PivotType` and the `cuDSS documentation
201
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
202
+ for more information.
203
+ """
204
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_TYPE, self._pivot_type)
205
+
206
+ return cudss.PivotType(self._pivot_type.item())
207
+
208
+ @pivot_type.setter
209
+ @utils.precondition(_check_valid_solver_wrapper)
210
+ def pivot_type(self, pivot_type):
211
+ """
212
+ Set the type of pivoting. See :class:`nvmath.bindings.cudss.PivotType` and the
213
+ `cuDSS documentation
214
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
215
+ information.
216
+
217
+ Args:
218
+ pivot_type: The type of pivoting (:class:`nvmath.bindings.cudss.PivotType` or
219
+ Python `int`).
220
+
221
+ """
222
+ pivot_type = cudss.PivotType(pivot_type)
223
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_TYPE, self._pivot_type, pivot_type)
224
+
225
+ @property
226
+ @utils.precondition(_check_valid_solver_wrapper)
227
+ def pivot_threshold(self):
228
+ """
229
+ Query or set the pivot threshold. See the
230
+ `cuDSS documentation
231
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
232
+ for more information.
233
+ """
234
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_THRESHOLD, self._pivot_threshold)
235
+
236
+ return self._pivot_threshold.item()
237
+
238
+ @pivot_threshold.setter
239
+ @utils.precondition(_check_valid_solver_wrapper)
240
+ def pivot_threshold(self, pivot_threshold):
241
+ """
242
+ Set the pivot threshold. See the
243
+ `cuDSS documentation
244
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
245
+ for more information.
246
+
247
+ Args:
248
+ pivot_threshold: The threshold for pivoting (Python `float`).
249
+
250
+ """
251
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_THRESHOLD, self._pivot_threshold, pivot_threshold)
252
+
253
+ @property
254
+ @utils.precondition(_check_valid_solver_wrapper)
255
+ def max_nnz(self):
256
+ """
257
+ Query or set the maximum limit for non-zero factors in the LU decomposition. See the
258
+ `cuDSS documentation
259
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
260
+ for more information.
261
+ """
262
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.MAX_LU_NNZ, self._max_lu_nnz)
263
+
264
+ return self._max_lu_nnz.item()
265
+
266
+ @max_nnz.setter
267
+ @utils.precondition(_check_valid_solver_wrapper)
268
+ def max_nnz(self, max_nnz):
269
+ """
270
+ Set the maximum limit for non-zero factors in the LU decomposition. See the
271
+ `cuDSS documentation
272
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
273
+ for more information.
274
+
275
+ Args:
276
+ max_nnz: The maximum limit for non-zero factors in the LU decomposition
277
+ (Python `int`).
278
+
279
+ """
280
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.MAX_LU_NNZ, self._max_lu_nnz, max_nnz)
281
+
282
+ @property
283
+ @utils.precondition(_check_valid_solver_wrapper)
284
+ def nd_min_levels(self):
285
+ """
286
+ Query or set the minimum number of levels for the nested dissection reordering. See
287
+ the `cuDSS documentation
288
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
289
+ for more information.
290
+ """
291
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.ND_NLEVELS, self._nd_nlevels)
292
+
293
+ return self._nd_nlevels.item()
294
+
295
+ @nd_min_levels.setter
296
+ @utils.precondition(_check_valid_solver_wrapper)
297
+ def nd_min_levels(self, min_levels):
298
+ """
299
+ Set the minimum number of levels for the nested dissection reordering. See the
300
+ `cuDSS documentation
301
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
302
+ for more information.
303
+
304
+ Args:
305
+ min_levels: The minimum number of levels for the nested dissection reordering
306
+ (Python `int`).
307
+
308
+ """
309
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.ND_NLEVELS, self._nd_nlevels, min_levels)
310
+
311
+ @property
312
+ @utils.precondition(_check_valid_solver_wrapper)
313
+ def use_superpanels(self):
314
+ """
315
+ Query or set the option to enable or disable superpanel optimization. See the
316
+ `cuDSS documentation
317
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
318
+ for more information.
319
+ """
320
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.USE_SUPERPANELS, self._use_superpanels)
321
+
322
+ return self._use_superpanels.item()
323
+
324
+ @use_superpanels.setter
325
+ @utils.precondition(_check_valid_solver_wrapper)
326
+ def use_superpanels(self, superpanels_flag):
327
+ """
328
+ Set the option to enable or disable superpanel optimization. See the
329
+ `cuDSS documentation
330
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
331
+ for more information.
332
+
333
+ Args:
334
+ superpanels_flag: The flag to enable or disable superpanel optimization
335
+ (Python `int` or `bool`, 0 to disable).
336
+
337
+ """
338
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.USE_SUPERPANELS, self._use_superpanels, superpanels_flag)
339
+
340
+
341
+ class FactorizationConfig:
342
+ """
343
+ An interface to configure :meth:`nvmath.sparse.advanced.DirectSolver.factorize`. The
344
+ current configuration can also be queried.
345
+ """
346
+
347
+ __slots__ = (
348
+ "_solver",
349
+ "_config_ptr",
350
+ "_factorization_alg",
351
+ "_pivot_epsilon_alg",
352
+ "_pivot_epsilon",
353
+ )
354
+
355
+ def __init__(self, solver):
356
+ """
357
+ ctor for internal use only.
358
+ """
359
+ self._solver = solver
360
+ self._config_ptr = self._solver.config_ptr
361
+ assert self._config_ptr is not None, "Internal error"
362
+
363
+ get_dtype = cudss.get_config_param_dtype
364
+
365
+ self._factorization_alg = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.FACTORIZATION_ALG))
366
+ self._pivot_epsilon_alg = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.PIVOT_EPSILON_ALG))
367
+ self._pivot_epsilon = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.PIVOT_EPSILON))
368
+
369
+ def _check_valid_solver_wrapper(self, *args, **kwargs):
370
+ _check_valid_solver(self)
371
+
372
+ @property
373
+ @utils.precondition(_check_valid_solver_wrapper)
374
+ def factorization_algorithm(self):
375
+ """
376
+ Query or set the factorization algorithm used. See
377
+ :class:`nvmath.bindings.cudss.FactorizationAlg` and the `cuDSS documentation
378
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
379
+ information.
380
+ """
381
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.FACTORIZATION_ALG, self._factorization_alg)
382
+
383
+ return cudss.FactorizationAlg(self._factorization_alg.item())
384
+
385
+ @factorization_algorithm.setter
386
+ @utils.precondition(_check_valid_solver_wrapper)
387
+ def factorization_algorithm(self, algorithm):
388
+ """
389
+ Set the factorization algorithm to use. See
390
+ :class:`nvmath.bindings.cudss.FactorizationAlg` and the `cuDSS documentation
391
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
392
+ information.
393
+
394
+ Args:
395
+ algorithm: The factorization algorithm of type
396
+ :class:`nvmath.bindings.cudss.FactorizationAlg` or Python `int`.
397
+
398
+ """
399
+ algorithm = cudss.FactorizationAlg(algorithm)
400
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.FACTORIZATION_ALG, self._factorization_alg, algorithm)
401
+
402
+ @property
403
+ @utils.precondition(_check_valid_solver_wrapper)
404
+ def pivot_eps_algorithm(self):
405
+ """
406
+ Query or set the algorithm used for pivot epsilon calculation. See
407
+ :class:`nvmath.bindings.cudss.PivotEpsilonAlg` and the `cuDSS documentation
408
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
409
+ information.
410
+ """
411
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_EPSILON_ALG, self._pivot_epsilon_alg)
412
+
413
+ return cudss.PivotEpsilonAlg(self._pivot_epsilon_alg.item())
414
+
415
+ @pivot_eps_algorithm.setter
416
+ @utils.precondition(_check_valid_solver_wrapper)
417
+ def pivot_eps_algorithm(self, algorithm):
418
+ """
419
+ Set the algorithm to use for pivot epsilon calculation. See
420
+ :class:`nvmath.bindings.cudss.PivotEpsilonAlg` and the `cuDSS documentation
421
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
422
+ information.
423
+
424
+ Args:
425
+ algorithm: The pivot epsilon algorithm of type
426
+ :class:`nvmath.bindings.cudss.PivotEpsilonAlg` or Python `int`.
427
+
428
+ """
429
+ algorithm = cudss.PivotEpsilonAlg(algorithm)
430
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_EPSILON_ALG, self._pivot_epsilon_alg, algorithm)
431
+
432
+ @property
433
+ @utils.precondition(_check_valid_solver_wrapper)
434
+ def pivot_eps(self):
435
+ """
436
+ Query or set the pivot epsilon value. See the
437
+ `cuDSS documentation
438
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
439
+ for more information.
440
+ """
441
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_EPSILON, self._pivot_epsilon)
442
+
443
+ return self._pivot_epsilon.item()
444
+
445
+ @pivot_eps.setter
446
+ @utils.precondition(_check_valid_solver_wrapper)
447
+ def pivot_eps(self, epsilon):
448
+ """
449
+ Set the pivot epsilon value. See the
450
+ `cuDSS documentation
451
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
452
+ for more information.
453
+
454
+ Args:
455
+ epsilon: The pivot epsilon value (Python numerical type).
456
+
457
+ """
458
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.PIVOT_EPSILON, self._pivot_epsilon, epsilon)
459
+
460
+
461
+ class SolutionConfig:
462
+ """
463
+ An interface to configure :meth:`nvmath.sparse.advanced.DirectSolver.solve`. The
464
+ current configuration can also be queried.
465
+ """
466
+
467
+ __slots__ = (
468
+ "_solver",
469
+ "_config_ptr",
470
+ "_solve_alg",
471
+ "_ir_n_steps",
472
+ )
473
+
474
+ def __init__(self, solver):
475
+ """
476
+ ctor for internal use only.
477
+ """
478
+ self._solver = solver
479
+ self._config_ptr = self._solver.config_ptr
480
+ assert self._config_ptr is not None, "Internal error"
481
+
482
+ get_dtype = cudss.get_config_param_dtype
483
+
484
+ self._solve_alg = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.SOLVE_ALG))
485
+ self._ir_n_steps = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.IR_N_STEPS))
486
+
487
+ def _check_valid_solver_wrapper(self, *args, **kwargs):
488
+ _check_valid_solver(self)
489
+
490
+ @property
491
+ @utils.precondition(_check_valid_solver_wrapper)
492
+ def solution_algorithm(self):
493
+ """
494
+ Query or set the solution algorithm used. See
495
+ :class:`nvmath.bindings.cudss.SolveAlg` and the `cuDSS documentation
496
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
497
+ information.
498
+ """
499
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.SOLVE_ALG, self._solve_alg)
500
+
501
+ return cudss.SolveAlg(self._solve_alg.item())
502
+
503
+ @solution_algorithm.setter
504
+ @utils.precondition(_check_valid_solver_wrapper)
505
+ def solution_algorithm(self, algorithm):
506
+ """
507
+ Set the algorithm to use for solving. See :class:`nvmath.bindings.cudss.SolveAlg`
508
+ and the `cuDSS documentation
509
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_ for more
510
+ information.
511
+
512
+ Args:
513
+ algorithm: The solution algorithm of type
514
+ :class:`nvmath.bindings.cudss.SolveAlg` or Python `int`.
515
+
516
+ """
517
+ algorithm = cudss.SolveAlg(algorithm)
518
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.SOLVE_ALG, self._solve_alg, algorithm)
519
+
520
+ @property
521
+ @utils.precondition(_check_valid_solver_wrapper)
522
+ def ir_num_steps(self):
523
+ """
524
+ Query or set the number of steps used for iterative refinement. See the
525
+ `cuDSS documentation
526
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
527
+ for more information.
528
+ """
529
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.IR_N_STEPS, self._ir_n_steps)
530
+
531
+ return self._ir_n_steps.item()
532
+
533
+ @ir_num_steps.setter
534
+ @utils.precondition(_check_valid_solver_wrapper)
535
+ def ir_num_steps(self, num_steps):
536
+ """
537
+ Set the number of steps to use for iterative refinement. See the
538
+ `cuDSS documentation
539
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
540
+ for more information.
541
+
542
+ Args:
543
+ num_steps: The number of steps to use for iterative refinement as a
544
+ Python `int`.
545
+
546
+ """
547
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.IR_N_STEPS, self._ir_n_steps, num_steps)
548
+
549
+
550
+ class InternalConfig:
551
+ """
552
+ Interface class for internal use only. No precondition for `@property` since this is
553
+ used in the ctor before `solver.valid_state` is set.
554
+ """
555
+
556
+ def __init__(self, solver):
557
+ """
558
+ ctor for internal use only.
559
+ """
560
+ self._solver = solver
561
+ self._config_ptr = self._solver.config_ptr
562
+ assert self._config_ptr is not None, "Internal error"
563
+
564
+ get_dtype = cudss.get_config_param_dtype
565
+
566
+ self._hybrid_memory_mode = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.HYBRID_MEMORY_MODE))
567
+ self._hybrid_device_memory_limit = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.HYBRID_DEVICE_MEMORY_LIMIT))
568
+ self._use_cuda_register_memory = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.USE_CUDA_REGISTER_MEMORY))
569
+ self._host_nthreads = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.HOST_NTHREADS))
570
+ self._hybrid_execute_mode = np.zeros((1,), dtype=get_dtype(ConfigParamEnum.HYBRID_EXECUTE_MODE))
571
+
572
+ @property
573
+ def hybrid_memory_mode(self):
574
+ """
575
+ Query or set the hybrid memory mode. See the
576
+ `cuDSS documentation
577
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
578
+ for more information.
579
+ """
580
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.HYBRID_MEMORY_MODE, self._hybrid_memory_mode)
581
+
582
+ return self._hybrid_memory_mode.item()
583
+
584
+ @hybrid_memory_mode.setter
585
+ def hybrid_memory_mode(self, mode):
586
+ """
587
+ Set the hybrid memory mode. See the
588
+ `cuDSS documentation
589
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
590
+ for more information.
591
+
592
+ Args:
593
+ mode: The hybrid memory mode as Python `int` (0=device or 1=hybrid).
594
+
595
+ """
596
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.HYBRID_MEMORY_MODE, self._hybrid_memory_mode, mode)
597
+
598
+ @property
599
+ def hybrid_device_memory_limit(self):
600
+ """
601
+ Query or set the hybrid device memory limit. See the
602
+ `cuDSS documentation
603
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
604
+ for more information.
605
+ """
606
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.HYBRID_DEVICE_MEMORY_LIMIT, self._hybrid_device_memory_limit)
607
+
608
+ return self._hybrid_device_memory_limit.item()
609
+
610
+ @hybrid_device_memory_limit.setter
611
+ def hybrid_device_memory_limit(self, limit):
612
+ """
613
+ Set the hybrid device memory limit. See the
614
+ `cuDSS documentation
615
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
616
+ for more information.
617
+
618
+ Args:
619
+ limit: The hybrid memory limit as Python `int`.
620
+
621
+ """
622
+ _set_scalar_attribute(
623
+ self._config_ptr, ConfigParamEnum.HYBRID_DEVICE_MEMORY_LIMIT, self._hybrid_device_memory_limit, limit
624
+ )
625
+
626
+ @property
627
+ def use_cuda_register_memory(self):
628
+ """
629
+ Query or set the CUDA memory registration flag. See the
630
+ `cuDSS documentation
631
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
632
+ for more information.
633
+ """
634
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.USE_CUDA_REGISTER_MEMORY, self._use_cuda_register_memory)
635
+
636
+ return self._use_cuda_register_memory.item()
637
+
638
+ @use_cuda_register_memory.setter
639
+ def use_cuda_register_memory(self, flag):
640
+ """
641
+ Set the CUDA memory registration flag. See the
642
+ `cuDSS documentation
643
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
644
+ for more information.
645
+
646
+ Args:
647
+ flag: The memory registration flag as Python `int` (0 or 1).
648
+
649
+ """
650
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.USE_CUDA_REGISTER_MEMORY, self._use_cuda_register_memory, flag)
651
+
652
+ @property
653
+ def host_nthreads(self):
654
+ """
655
+ Query or set the number of host threads. See the
656
+ `cuDSS documentation
657
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
658
+ for more information.
659
+ """
660
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.HOST_NTHREADS, self._host_nthreads)
661
+
662
+ return self._host_nthreads.item()
663
+
664
+ @host_nthreads.setter
665
+ def host_nthreads(self, nthreads):
666
+ """
667
+ Set the number of host threads. See the
668
+ `cuDSS documentation
669
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
670
+ for more information.
671
+
672
+ Args:
673
+ nthreads: The number of host threads as Python `int`.
674
+
675
+ """
676
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.HOST_NTHREADS, self._host_nthreads, nthreads)
677
+
678
+ @property
679
+ def hybrid_execute_mode(self):
680
+ """
681
+ Query or set the hybrid execution mode. See the
682
+ `cuDSS documentation
683
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
684
+ for more information.
685
+ """
686
+ _get_scalar_attribute(self._config_ptr, ConfigParamEnum.HYBRID_EXECUTE_MODE, self._hybrid_execute_mode)
687
+
688
+ return self._hybrid_execute_mode.item()
689
+
690
+ @hybrid_execute_mode.setter
691
+ def hybrid_execute_mode(self, mode):
692
+ """
693
+ Set the hybrid execution mode. See the
694
+ `cuDSS documentation
695
+ <https://docs.nvidia.com/cuda/cudss/types.html#cudssconfigparam-t>`_
696
+ for more information.
697
+
698
+ Args:
699
+ mode: The hybrid execution mode as Python `int` (0=device or 1=hybrid).
700
+
701
+ """
702
+ _set_scalar_attribute(self._config_ptr, ConfigParamEnum.HYBRID_EXECUTE_MODE, self._hybrid_execute_mode, mode)