Coverage for cuda/core/_utils/cuda_utils.pyx: 94.86%
214 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5import functools
6from functools import partial
7import multiprocessing
8import platform
9import warnings
10from collections.abc import Sequence
11from contextlib import ExitStack
12from typing import Any, Callable, NamedTuple
14from cuda.bindings import driver as driver, nvrtc as nvrtc, runtime as runtime
16# Module-level annotations that reference `driver`, `nvrtc`, and `runtime` so
17# that stubgen-pyx keeps these imports in the generated `.pyi` (it would
18# otherwise trim them as unused). These names are not assigned, so they only
19# affect __annotations__ and have no runtime cost.
20_keep_driver_in_stub: 'driver.CUresult'
21_keep_nvrtc_in_stub: 'nvrtc.nvrtcResult'
22_keep_runtime_in_stub: 'runtime.cudaError_t'
24from cuda.bindings.nvvm import nvvmError
25from cuda.bindings.nvjitlink import nvJitLinkError
27from cpython.buffer cimport PyObject_GetBuffer, PyBuffer_Release, Py_buffer, PyBUF_SIMPLE
29from cuda.bindings cimport cynvrtc, cynvvm, cynvjitlink
31from cuda.core._utils.driver_cu_result_explanations import DRIVER_CU_RESULT_EXPLANATIONS
32from cuda.core._utils.runtime_cuda_error_explanations import RUNTIME_CUDA_ERROR_EXPLANATIONS
35class CUDAError(Exception):
36 pass
39class NVRTCError(CUDAError):
40 pass
44class ComputeCapability(NamedTuple):
45 """A named tuple of (major, minor) CUDA compute capability version numbers."""
46 major: int
47 minor: int
50def cast_to_3_tuple(label: str, cfg: int | tuple[int, ...]) -> tuple[int, int, int]:
51 cfg_orig = cfg 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh'J(JZJ_KBh
52 if isinstance(cfg, int): 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh'J(JZJ_KBh
53 cfg = (cfg,) 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h_h{h|h}h~haibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Kcf[KdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg]K^KbdlcmcpiqisitiviwiVeWePgQgxiyiziAiBiCiDiEiFiHiIiKiLiRgSgMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXeYe9iQfXgYg!i#iZg0g$i%i(i)iZe0e1g2g*i+i,i-i.i/i:i;i=i@i[i^i_i3g4g`i{i|i5g6g}i7g8g~iajbjcjdjTfejfj1e2esjZf9g!gtjuj#g$gvjwjyjzjBjCjEjFjHjIjKjLjNjOjQjRjAh'J
54 else:
55 common = "must be an int, or a tuple with up to 3 ints" 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAh(JZJ_KBh
56 if not isinstance(cfg, tuple): 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAh(JZJ_KBh
57 raise ValueError(f"{label} {common} (got {type(cfg)})") 2_K
58 if len(cfg) > 3: 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAh(JZJBh
59 raise ValueError(f"{label} {common} (got tuple with length {len(cfg)})") 2(J
60 if any(not isinstance(val, int) for val in cfg): 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAhZJBh
61 raise ValueError(f"{label} {common} (got {cfg})") 2ZJ
62 if any(val < 1 for val in cfg): 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh'JBh
63 plural_s = "" if len(cfg) == 1 else "s" 2cf'JBh
64 raise ValueError(f"{label} value{plural_s} must be >= 1 (got {cfg_orig})") 2cf'JBh
65 return cfg + (1,) * (3 - len(cfg)) 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh
68cdef int _get_current_device_id() except? -1:
69 """Return the current thread's bound CUdevice ordinal."""
70 cdef cydriver.CUdevice dev
71 with nogil: 2)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK
72 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK
73 return <int>dev 2)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK
76cdef int _raise_nvrtc_error(cynvrtc.nvrtcProgram prog, cynvrtc.nvrtcResult err) except -1:
77 """Build error message with program log and raise NVRTCError."""
78 cdef const char* err_str = cynvrtc.nvrtcGetErrorString(err) 1adb
79 cdef size_t logsize = 0 1db
80 if prog != NULL: 1db
81 cynvrtc.nvrtcGetProgramLogSize(prog, &logsize) 1db
82 cdef bytes log_bytes
83 cdef str log_str = "" 1db
84 if logsize > 1 and prog != NULL: 1db
85 log_bytes = b" " * logsize 1db
86 if cynvrtc.nvrtcGetProgramLog(prog, <char*>log_bytes) == cynvrtc.nvrtcResult.NVRTC_SUCCESS: 1db
87 log_str = log_bytes.decode("utf-8", errors="backslashreplace") 1db
88 err_msg = f"{err}: {err_str.decode()}" if err_str != NULL else f"NVRTC error {err}" 1db
89 if log_str: 1db
90 err_msg += f", compilation log:\n\n{log_str}" 1db
91 raise NVRTCError(err_msg) 1db
94cdef int _raise_nvvm_error(cynvvm.nvvmProgram prog, cynvvm.nvvmResult err) except -1:
95 """Raise nvvmError annotated with the program log."""
96 cdef size_t logsize = 0 2:b
97 if prog != NULL: 2:b
98 cynvvm.nvvmGetProgramLogSize(prog, &logsize) 2:b
99 cdef bytes log_bytes
100 cdef str log_str = "" 2:b
101 if logsize > 1 and prog != NULL: 2:b
102 log_bytes = b" " * logsize 2:b
103 if cynvvm.nvvmGetProgramLog(prog, <char*>log_bytes) == cynvvm.nvvmResult.NVVM_SUCCESS: 2:b
104 log_str = log_bytes.decode("utf-8", errors="backslashreplace") 2:b
105 cdef object exc = nvvmError(err) 2:b
106 if log_str: 2:b
107 exc.args = (exc.args[0] + f"\nNVVM program log: {log_str}", *exc.args[1:]) 2:b
108 raise exc 2:b
111cdef int _raise_nvjitlink_error(
112 cynvjitlink.nvJitLinkHandle handle, cynvjitlink.nvJitLinkResult err) except -1:
113 """Raise nvJitLinkError annotated with the error log."""
114 cdef size_t logsize = 0 2c (g
115 if handle != NULL: 2a c (g
116 cynvjitlink.nvJitLinkGetErrorLogSize(handle, &logsize) 1c
117 cdef bytes log_bytes
118 cdef str log_str = "" 2c (g
119 if logsize > 1 and handle != NULL: 2c (g
120 log_bytes = b" " * logsize 1c
121 if cynvjitlink.nvJitLinkGetErrorLog(handle, <char*>log_bytes) == \ 1c
122 cynvjitlink.nvJitLinkResult.NVJITLINK_SUCCESS: 1c
123 log_str = log_bytes.decode("utf-8", errors="backslashreplace") 1c
124 cdef object exc = nvJitLinkError(err) 2c (g
125 if log_str: 2c (g
126 exc.args = (exc.args[0] + f"\nnvJitLink error log: {log_str}", *exc.args[1:]) 1c
127 raise exc 2c (g
130cdef object _RUNTIME_SUCCESS = runtime.cudaError_t.cudaSuccess
131cdef object _NVRTC_SUCCESS = nvrtc.nvrtcResult.NVRTC_SUCCESS
134cpdef inline int _check_driver_error(cydriver.CUresult error) except?-1 nogil:
135 if error == cydriver.CUresult.CUDA_SUCCESS: 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*jJe+j,j-j.j/j:j;j=j?jKe@j[j]j^j_jLe`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBk0JCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m1J!m#m$m%m'm(m)m*m2J+m,m-m.m/m:m3J;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n4J,n-nMe.nNe/nOe:nPe;nQe=n?n@n[n]nqb^n_n`n`K{n|n)g}n5J~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoReAoBoCoDoEoFo#bGo$bHo%bIo4fJo5fKo6fLoocMopcNoOoPoQoRoSorgTosgUotgVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8oug9ovg!owg#oJW$oKW%oLW'o{K(o|K)o*o+oMW,o}K-o.o/o:o;o=o'b?o(b@o)b[o~K]oaL^obL_o`o{o|o}o~oap*gbpcpdpepfp*bgp+bhp,bip9fjp!fkp#flpqcmprcnpopSeppqp_brp`bspChtpcLupUbvpwpxpypzpvbApTeBpUeCpDpEpFpGpHp1bIpJpwbKpLpMpNp{biKOp4ejKPp5ekKQpgdRphdSpNWlKTpdLmKUpeLVpnKWpoKXppKYp|bqKZp2b0prK1p6esK2p* 3p+ 4p, 5p3b6p7etK7p8euK8p9evK9p!ewK!pxK#pyK$pzK%pAK'pBK(pCK)pDK*pEK+pfL,pgL-pOW.pPW/pQW:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_phL`pGh{piL|pHh}pIh~pjLaqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q5q6q7q8q9q!q#q$q6J3h%q'qyc(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q|c}q~qarbrcrdrerfr}cgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQr~cRrjcSrkcTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!hkLlL#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,h-eKu.e-hLu/eMuNu;gOuPuQuRuSuTuUuIcVumLWunLXuccdc: ecYufcZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-ubd.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvlckvmclvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]vRWoL^v_v`v{v|vpL}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwqLvwwwxwywzwrLAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8wsL9wVe!wtL#wuL$wFK%wGK'wvL(wwL)wxL*wyL+wzL,wHK-wWe.wcd/wAL:w;w=wIK?wBL@wCL[wDL]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxELqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxFLLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.xJK/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7zKK8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_zGL`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAHLEAZeFAILGAJLHALKIAMKJAKLKALLLAMLMANLNAOLOANKPA0eQAddRAPLSATAUAOKVAQLWARLXASLYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.ATL/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBULgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBPKRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDQKDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8DVL9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEWLbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEXLzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEYLXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-EZL.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhF0LiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFF1LGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F2L5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPG=gQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H1f@H[H2f]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlI3LmI4LnI5LoI6LpI7LqI8LrIsI9LtI!LuI#LvI$LwI%LxIyIzI'LAIBICIDIEI%gFIGI'gHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJSWTW(L)L*L+LUW,L-L.L/LVW:LWW;L=LXW?LYW@LZW[L]L0W^L1W_L2W`L3W4W{L5W|L6W7W8W9W}LeJfJgJhJiJ~LjJkJlJ!WmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
136 return 0 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*jJe+j,j-j.j/j:j;j=j?jKe@j[j]j^j_jLe`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-nMe.nNe/nOe:nPe;nQe=n?n@n[n]nqb^n_n`n`K{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoReAoBoCoDoEoFo#bGo$bHo%bIo4fJo5fKo6fLoocMopcNoOoPoQoRoSorgTosgUotgVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8oug9ovg!owg#oJW$oKW%oLW'o{K(o|K)o*o+oMW,o}K-o.o/o:o;o=o'b?o(b@o)b[o~K]oaL^obL_o`o{o|o}o~oapbpcpdpepfp*bgp+bhp,bip9fjp!fkp#flpqcmprcnpopSeppqp_brp`bspChtpcLupUbvpwpxpypzpvbApTeBpUeCpDpEpFpGpHpIpJpwbKpLpMpNp{biKOp4ejKPp5ekKQpgdRphdSpNWlKTpdLmKUpeLVpnKWpoKXppKYp|bqKZp2b0prK1p6esK2p* 3p+ 4p, 5p3b6p7etK7p8euK8p9evK9p!ewK!pxK#pyK$pzK%pAK'pBK(pCK)pDK*pEK+pfL,pgL-pOW.pPW/pQW:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_phL`pGh{piL|pHh}pIh~pjLaqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q5q6q7q8q9q!q#q$q3h%q'qyc(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q|c}q~qarbrcrdrerfr}cgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQr~cRrjcSrkcTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!hkLlL#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,hKu.e-hLu/eMuNuOuPuQuRuSuTuUuIcVumLWunLXuccdc: ecYufcZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-ubd.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvlckvmclvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]vRWoL^v_v`v{v|vpL}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwqLvwwwxwywzwrLAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8wsL9wVe!wtL#wuL$wFK%wGK'wvL(wwL)wxL*wyL+wzL,wHK-wWe.wcd/wAL:w;w=wIK?wBL@wCL[wDL]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxELqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxFLLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.xJK/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7zKK8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_zGL`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAHLEAZeFAILGAJLHALKIAMKJAKLKALLLAMLMANLNAOLOANKPA0eQAddRAPLSATAUAOKVAQLWARLXASLYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.ATL/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBULgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBPKRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDQKDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8DVL9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEWLbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEXLzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEYLXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-EZL.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhF0LiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFF1LGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F2L5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H1f@H[H2f]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlI3LmI4LnI5LoI6LpI7LqI8LrIsI9LtI!LuI#LvI$LwI%LxIyIzI'LAIBICIDIEI%gFIGI'gHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJSWTW(L)L*L+LUW,L-L.L/LVW:LWW;L=LXW?LYW@LZW[L]L0W^L1W_L2W`L3W4W{L5W|L6W7W8W9W}LeJfJgJhJiJ~LjJkJlJ!WmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
137 cdef const char* name
138 name_err = cydriver.cuGetErrorName(error, &name) 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g
139 if name_err != cydriver.CUresult.CUDA_SUCCESS: 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g
140 raise CUDAError(f"UNEXPECTED ERROR CODE: {error}") 23h
141 with gil: 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g
142 # TODO: consider lower this to Cython
143 expl = DRIVER_CU_RESULT_EXPLANATIONS.get(int(error)) 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g
144 if expl is not None: 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g
145 raise CUDAError(f"{name.decode()}: {expl}") 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g
146 cdef const char* desc
147 desc_err = cydriver.cuGetErrorString(error, &desc)
148 if desc_err != cydriver.CUresult.CUDA_SUCCESS:
149 raise CUDAError(f"{name.decode()}")
150 raise CUDAError(f"{name.decode()}: {desc.decode()}")
153cpdef inline int _check_runtime_error(error) except?-1:
154 if error == _RUNTIME_SUCCESS: 22b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/haM?g:h:eyc;h=h?h.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e]e^e
155 return 0 22b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/h?g:h:eyc;h=h?h.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e]e^e
156 # `_check_error()` reaches this path only for `runtime.cudaError_t` values.
157 # Use the enum name directly because Windows hybrid cudart can lag that table.
158 name = error.name 2aM?g
159 expl = RUNTIME_CUDA_ERROR_EXPLANATIONS.get(int(error)) 2aM?g
160 if expl is not None: 2aM?g
161 raise CUDAError(f"{name}: {expl}") 2aM?g
162 desc_err, desc = runtime.cudaGetErrorString(error) 2?g
163 if desc_err != _RUNTIME_SUCCESS: 2?g
164 raise CUDAError(f"{name}")
165 desc = desc.decode() 2?g
166 raise CUDAError(f"{name}: {desc}") 2?g
169cpdef inline int _check_nvrtc_error(error, handle=None) except?-1:
170 if error == _NVRTC_SUCCESS: 2a TJbMMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe
171 return 0 2a bMMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe
172 err = f"{error}: {nvrtc.nvrtcGetErrorString(error)[1].decode()}" 2TJbM
173 if handle is not None: 2TJbM
174 _, logsize = nvrtc.nvrtcGetProgramLogSize(handle) 2TJ
175 log = b" " * logsize 2TJ
176 _ = nvrtc.nvrtcGetProgramLog(handle, log) 2TJ
177 err += f", compilation log:\n\n{log.decode('utf-8', errors='backslashreplace')}" 2TJ
178 raise NVRTCError(err) 2TJbM
181cdef inline int _check_error(error, handle=None) except?-1:
182 if isinstance(error, driver.CUresult): 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
183 return _check_driver_error(error) 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbqcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,hKu.e-hLu/eMuNuOuPuQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
184 elif isinstance(error, runtime.cudaError_t): 2a 2b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/h:h:eyc;h=h?hMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e,c+d,d-d@g.d[g/d]g:d]e^e^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe
185 return _check_runtime_error(error) 22b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/h:h:eyc;h=h?h.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e]e^e
186 elif isinstance(error, nvrtc.nvrtcResult): 2a Mcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe
187 return _check_nvrtc_error(error, handle=handle) 2a Mcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe
188 else:
189 raise RuntimeError(f"Unknown error type: {error}")
192def handle_return(result: tuple[Any, ...], handle: object = None) -> Any:
193 _check_error(result[0], handle=handle) 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
194 cdef int out_len = len(result) 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
195 if out_len == 1: 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
196 return 2; = ed? ,j@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbfd3enc5 0 Eb;b=b-b?b@b[b]b^b1 2 3 4 rbsbtbubFbGbHbChvbwb{b4e5egdhd|b2b6e* + , 3b7e8e9e!e}bDhEh- . $f/ FhGhHhIhJh%fKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh$eidjdkdldmdndodpdqdrdsdtdudvdwdxd0hydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d1h2h$d%d'd(d)d*dsctcucvcwcxc5q:eycxb4h5h6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(h(eJc)h*h)e*e+egc;eKc=e,e?e+h,h.e-h/eLc@e[eIc]e^e.h
197 elif out_len == 2:
198 return result[1] 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOnPn0 QnRnSnTnEbUnVnWnXnYnZn0n-b1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbqcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h6q7q8q9q!q#q$q%q:h'q(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'h~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,hKu.e-hLu/eMuNuOuPuQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ
199 else:
200 return result[1:] 2a ; = ed? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbfdvbwbMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe
203cpdef object check_or_create_options(type cls, object options, str options_description="", bint keep_none=False):
204 """
205 Create the specified options dataclass from a dictionary of options or None.
206 """
207 if options is None: 2:M;M=M?M@M[M]M^M_M`M; |f}f= ed? ~f{M|MagbgJecg}Mdgeg~MaNfgKebNgghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbcNdNeNfNgNhNiNjNkNjglNmNnNkglgmgngogRKSKTKUKVKWKXKYK@h[h]hoNpN{e_hqNrN|e{hsNtN}e|huNvN~e}hwNxNaf~hyNzNbfaiANBNCNbicidieifd3eDNENFNfiGNHNINJNnccMKNLNKM5 0 MNgipgEbqgNNONPN;b=b-bQN?b@b[b]bRNSN^bhiTNUNMeNeOePeQeqb)gLMMMNMVNWNXN1 2 3 4 rbsbtbubFbGbHbYNZN0N1N2N3N4NRe5N6N7N8N9N#b$b%b4f5f6focpc!N#Nrgsgtg$N%Nugvgwg'Nii(N)N*N+N,N'b(b)b~KaLbL`o|oji-N*g.N/N:N;N*b+b,b9f!f#fqcrc=NSeki_b`bUb?N@N[N]NvbTeUe^NxgygzgAg1bBgwbOMZKPM{biKjK5ekKgd_Nhd`NlKmKeL{N|NnK}NoKpK|bqK2brK6esK* ~N+ aO, bO3b7etK8euK9evK!ewKxKyKzKAKBKCKDKEKfLcOgLdOeOfOgO}bhOiOjO- kO. lO/ mOnOhLoOiLpOqOjLrOsOtOuOvOwOxO'fyOzOAO(fBOCO#e)f*f+fDOEO,fFOGO-fHO.fIOJOKOLOMONOOOPOQOROSO$eTOUOdMVOeMWOXOYOZO0OfM1OgM2O3O4O5O6O7O( 8O) 9OUJVJ7J8JWJXJ9J!JhM0KiM!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkP!d#dlPmPnPoPpPqPsctcucvcwcxcrPsPtPuPvPwP#J:eycxPyPzPjM|ckMAPBPCPDPEPFPGPHPIP}cJPKPLPMPlMmMnMCgNPOPPPQPRPSPTPUPVPWPXPYPQMRMZP0PSM~cTMjc1Pkc2PUM3PVM4PWMXMYM5PZM0M1M2M3M4M5M6M7M8M9M!M#M$M6P7P8P9P!P#P%MYJ'M(MxbyhaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg$PMcc Nc%POc'PPc(PQc)PRc*PSc+PTc,PUc-PVc.PWc/PXc:PYc)MZc*M0c;P1c=P2c?P3c@P4c[P5c]P6c^P7c_P8c`P9c{P!c|P#c}P$c~P%c(g'caQ(cbQ)ccQ*cdQeQfQ+c%e.b'e/bgQhQiQjQkQkLlL~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(elQmQnQoQpQqQJcrQ:foMsQtQ)e*euQvQwQxQ+epMqMyQzQrMsMtMuMgc;eKc=eAQBQCQDQEQ,eFQGQHQIQJQKQLQMQNQOQvMPQwMQQxMRQyMSQzMTQAMUQBMVQCMWQXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%QDM'Q(QEM)Q?e-e.e/e*Q+Q,Q;gLc@e[e-Q.Q/Q:QIc;QmLnLccdc: ecfc=Q?Q@Q,c[Q]Q;f^Q_Q`Q{Q|Qbd}Q!b~QaRbRcRdReRfRgRhRiR=fjRkRlRmR+d,d-dnRoRpR.d/d:dlcmcqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[Rwh_e`e{cIeoL]R^R_RpLpi`R{R|R}Rqi~RaSqLbScSrLsidSeSfSgStihSiSvijSkSwisLVetLuLFKGKvLwLxLyLzLHKWecdAL;wIKBLCLDLPgQgxiyiziAiBiCilSmSDiELEinSoSpSFiqSFLHirSsStSuSIivSwSKixSySLizSJKRgASBSCSDSESFSGSHSISJSKSSgJfLS1KMSNSOSPSQSRSSSTSUSVSWSXSYSZS0SMi1S2SNi3S4SOi5STg6S7S8S9S!S#S$S%S'SUg(S2K)S*S+SPiVgWgQiRiSiTiUiKfViWiXeLfMfNfYePf9i,S-SQf3K4K.SXg/S:S;S=S?S@S[S]S^S_SYg`S5K{S|S}S!i~SaT#ibTKKZgcTdTeTfTgThTiTjTkTlTmTnT0gRfoT6KpTqTrTsTGL$itTuTvTwT%ixTyT(izTAT)iHLZeILJLLKMKKLLLMLNLOLNK0eddPLTAOKQLRLSL1g2g*i+i,i-i.i/iBTCT:iTL;iDTETFT=iGTUL@iHTITJTKT[iLTMT^iNTOT_iPTPK3gQTRTSTTTUTVTWTXTYTZT0T4gSf1T7K2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T`i*T+T{i,T-T|i.T5g/T:T;T=T?T@T[T]T^T6g_T8K`T{T|T}i7g8g~iajbjcjdjTfejfj1eUfVfWf2eYfsj}T~TZf9K!KaU9gbUcUdUeUfUgUhUiUjUkU!glU#KmUnUoUtjpUqUujrUQK#gsUtUuUvUwUxUyUzUAUBUCUDU$g0fEU$KFUGUHUIU]e^eFMGMJUKUVLvjLUMUNUOUwjPUQURUSUTUWLyjUUVUWUXUzjYUZUXLBj0U1U2U3UCj4U5UYLEj6U7U8U9UFj!U#UZLHj$U%U'U(UIj)U*U0LKj+U,U-U.ULj/U:U1LNj;U=U?U@UOj[U]U^U2LQj_U`U{U|URj}U~UaVbVcVdV;d=d+M?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteeV:bfV=ggVhViVjVkVlVmVnVoVpVqVrVsVtVuV,M-MvVwVxVyVuezVAVBVCV.MHMDVveEVFVGVHVIVJVKVLVweMVNVOVb xeyezeAeBeCeDeEePVQVRVSVFeTVGeHeUVVVWVXVYVZV0V1V2V3V4V5V6V7V8V9V!V/M#V$V%V'VIM(V)V*V+V,V-V)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj3L4L5L6L7L8L{J9L!L#L$L%L|J}J'L~JaKbKcK%gdK'geKfK3fgKhK?f(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~L@f
208 if keep_none: 2:M;M=M?M@M[M]M^M_M`M; |f}f= ed? ~f{M|MagbgJecg}Mdgeg~MaNfgKebNgghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbcNdNeNfNgNhNiNjNkNjglNmNnNkglgmgngogRKSKTKUKVKWKXKYKoNpNqNrNsNtNuNvNwNxNyNzNANBNCNfd3eDNENFNGNnccMKM5 0 pgEbqgNNONPN;b=b-bQN?b@b[b]bRNSN^bTNUNMeNeOePeQeqb)gLMMMNMVNWNXN1 2 3 4 rbsbtbubFbGbHbYNZN0N1N2N3N4NRe5N6N7N8N9N#b$b%b4f5f6focpc!N#N$N%N'N(N)N*N+N,N'b(b)b~KaLbL`o|o-N*g.N/N:N;N*b+b,b9f!f#fqcrc=NSe_b`bUb?N@N[N]NvbTeUe^NxgygzgAg1bBgwbZK{biKjK5ekKgd_Nhd`NlKmKeL{N|NnK}NoKpK|bqK2brK6esK* ~N+ aO, bO3b7etK8euK9evK!ewKxKyKzKAKBKCKDKEKfLcOgLdOeOfOgO}bhOiOjO- kO. lO/ mOnOhLoOiLpOqOjLrOsOtOuOvOwOxO'fyOzOAO(fBOCO#e)f*f+fDOEO,fFOGO-fHO.fIOJOKOLOMONOOOPOQOROSO$e7O( ) UJVJ7J8JWJXJ9J!JhM0KiMrPsPtPuPvPwP:eycxPyPzPjM|ckMBPDPEPFPGPHPIP}cJPKPLPMPlMmMnMCgNPOPPPQPRPSPTPUPVPWPXPYPZP0P~cjckc4P5Pxbad%e.b'e/bgQhQiQjQkQkLlL~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(elQmQnQoQpQqQJcoMsQ)e*euQvQwQxQ+epMqMyQzQrMsMtMuMgc;eKc=evMPQwMQQxMRQyMSQzMTQAMUQBMVQCMWQDMEM-e.e/e*Q+Q,QLcIc;QmLnL[Q]Q;f^Q_Q`Q{Q|Qbd}Q!b~QaRbRcRdReRfRgRhRiR=fjRkRlRmR.d/d:dlcmcqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R{coL]R^R_RpL`R{R|R}R~RaSqLbScSrLdSeSfSgShSiSjSkSsLVetLuLFKGKvLwLxLyLzLHKWecdAL;wIKBLCLDLPgQglSmSELnSoSpSqSFLrSsStSuSvSwSxSySzSJKRgASBSCSDSESFSGSHSISJSKSSgJfLS1KMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5STg6S7S8S9S!S#S$S%S'SUg(S2K)S*S+SVgWgLfMfNfPf,S-S3K4K.SXg/S:S;S=S?S@S[S]S^S_SYg`S5K{S|S}S~SaTbTKKZgcTdTeTfTgThTiTjTkTlTmTnT0gRfoT6KpTqTrTsTGLtTuTvTwTxTyTzTATHLZeILJLLKMKKLLLMLNLOLNK0eddPLTAOKQLRLSL1g2gBTCTTLDTETFTGTULHTITJTKTLTMTNTOTPTPK3gQTRTSTTTUTVTWTXTYTZT0T4gSf1T7K2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T5g/T:T;T=T?T@T[T]T^T6g_T8K`T{T|T7g8gUfVfWfYf}T~T9K!KaU9gbUcUdUeUfUgUhUiUjUkU!glU#KmUnUoUpUqUrUQK#gsUtUuUvUwUxUyUzUAUBUCUDU$g0fEU$KFUGUHUIUFMGMJUKUVLLUMUNUOUPUQURUSUTUWLUUVUWUXUYUZUXL0U1U2U3U4U5UYL6U7U8U9U!U#UZL$U%U'U(U)U*U0L+U,U-U.U/U:U1L;U=U?U@U[U]U^U2L_U`U{U|U}U~UaVdV=dd neeV:bfV=gvVwVxVyVzVAVBVCVHMveweb VVWVZV0V1V2V6V7V8V9V%VIM(V+V,V1f2fTjUjVjWjXj3L4L5L6L7L8L9L!L#L$L%L'L%g'g?f(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~L@f
209 return options 2:MBNGNKM5 0 NNONPN;b=b-bQN?b@b[b]bRNSN^bLMMMNM1 2 3 4 rbsbtbub_b`bZKiKjKkKgdhdlKmKeLnKoKpKqK2brKsK* + , 3btKuKvKwKxKyKzKAKBKCKDKEKfLgL}b- . / xOyOzO(fCO#e*fDO,fGOHOIOKOMOOOQOSO7O:eyc~cjckckLlLnQoQpQqQoMsQ+epMqMyQzQrMsMtMuMgc;eKc=evMPQwMQQxMRQyMSQzMTQAMUQBMVQCMWQDMEM*Q+Q,QbdlcmcoLpLqLrLsLVetLuLFKGKvLwLxLyLzLHKWecdAL;wIKBLCLDLELFLJKKKGLHLZeILJLLKMKKLLLMLNLOLNK0eddPLTAOKQLRLSLTLULPKQKVLWLXLYLZL0L1L2L1f2f3L4L5L6L7L8L9L!L#L$L%L'L%g'g?f(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~L
210 return cls() 2;M=M?M@M[M]M^M_M`M; |f}f= ed? ~f{M|MagbgJecg}Mdgeg~MaNfgKebNgghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbcNdNeNfNgNhNiNjNkNjglNmNnNkglgmgngogRKSKTKUKVKWKXKYKoNpNqNrNsNtNuNvNwNxNyNzNANCNfd3eDNENFNnccMKM5 0 pgEbqg;b=b-b?b@b[b]b^bTNUNMeNeOePeQeqb)gLMMMNMVNWNXN1 2 3 4 rbsbtbubFbGbHbYNZN0N1N2N3N4NRe5N6N7N8N9N#b$b%b4f5f6focpc!N#N$N%N'N(N)N*N+N,N'b(b)b~KaLbL`o|o-N*g.N/N:N;N*b+b,b9f!f#fqcrc=NSe_b`bUb?N@N[N]NvbTeUe^NxgygzgAg1bBgwb{biKjK5ekKgd_Nhd`NlKmK{N|NnK}NoKpK|bqK2brK6esK~NaObO3b7etK8euK9evK!ewKxKyKzKAKBKCKDKEKcOdOeOfOgOhOiOjOkOlOmOnOhLoOiLpOqOjLrOsOtOuOvOwO'fAOBO#e)f+fEOFO-f.fJOLONOPORO$e( ) UJVJ7J8JWJXJ9J!JhM0KiMrPsPtPuPvPwPxPyPzPjM|ckMBPDPEPFPGPHPIP}cJPKPLPMPlMmMnMCgNPOPPPQPRPSPTPUPVPWPXPYPZP0P~cjckc4P5Pxbad%e.b'e/bgQhQiQjQkQ~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(elQmQJc)e*euQvQwQxQgc-e.e/eLcIc;QmLnL[Q]Q;f^Q_Q`Q{Q|Qbd}Q!b~QaRbRcRdReRfRgRhRiR=fjRkRlRmR.d/d:dlcmcqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R{c]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSFKGKHKIKPgQglSmSnSoSpSqSrSsStSuSvSwSxSySzSJKRgASBSCSDSESFSGSHSISJSKSSgJfLS1KMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5STg6S7S8S9S!S#S$S%S'SUg(S2K)S*S+SVgWgLfMfNfPf,S-S3K4K.SXg/S:S;S=S?S@S[S]S^S_SYg`S5K{S|S}S~SaTbTKKZgcTdTeTfTgThTiTjTkTlTmTnT0gRfoT6KpTqTrTsTtTuTvTwTxTyTzTATLKMKNKOK1g2gBTCTDTETFTGTHTITJTKTLTMTNTOTPTPK3gQTRTSTTTUTVTWTXTYTZT0T4gSf1T7K2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T5g/T:T;T=T?T@T[T]T^T6g_T8K`T{T|T7g8gUfVfWfYf}T~T9K!KaU9gbUcUdUeUfUgUhUiUjUkU!glU#KmUnUoUpUqUrUQK#gsUtUuUvUwUxUyUzUAUBUCUDU$g0fEU$KFUGUHUIUFMGMJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[U]U^U_U`U{U|U}U~UaVdV=dd neeV:bfV=gvVwVxVyVzVAVBVCVHMveweb VVWVZV0V1V2V6V7V8V9V%VIM(V+V,V1f2fTjUjVjWjXj@f
211 elif isinstance(options, cls): 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h{e_h|e{h}e|h~e}haf~hbfaibicidieifiHNINJNnccMKNLN5 0 MNgipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwbOMZKPMTOUOdMVOeMWOXOYOZO0OfM1OgM2O3O4O5O6O( 8O) 9OUJVJ7J8JWJXJ9J!JhM0KiM!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkP!d#dlPmPnPoPpPqPsctcucvcwcxc#JjM|ckMAPCP}clMmMnMCgQMRMSM~cTMjc1Pkc2PUM3PVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M6P7P8P9P!P#P%MYJ'M(MxbyhaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg$PMcc Nc%POc'PPc(PQc)PRc*PSc+PTc,PUc-PVc.PWc/PXc:PYc)MZc*M0c;P1c=P2c?P3c@P4c[P5c]P6c^P7c_P8c`P9c{P!c|P#c}P$c~P%c(g'caQ(cbQ)ccQ*cdQeQfQ+cJcrQ:foMtQpMqMrMsMtMuMgcKcAQBQCQDQEQ,eFQGQHQIQJQKQLQMQNQOQvMwMxMyMzMAMBMCMXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%QDM'Q(QEM)Q?e-e;gLc@e[e-Q.Q/Q:QIcccdc: ecfc=Q?Q@Q,cbd+d,d-dnRoRpRlcmcwh_e`e{cIepiqisitiviwiVeWePgQgxiyiziAiBiCiDiEiFiHiIiKiLiRgSgMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXeYe9iQfXgYg!i#iZg0g$i%i(i)iZe0e1g2g*i+i,i-i.i/i:i;i=i@i[i^i_i3g4g`i{i|i5g6g}i7g8g~iajbjcjdjTfejfj1e2esjZf9g!gtjuj#g$g]e^eFMGMvjwjyjzjBjCjEjFjHjIjKjLjNjOjQjRjbVcV;d+M?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`coepeqeresetegVhViVjVkVlVmVnVoVpVqVrVsVtVuV,M-Mue.MHMDVEVFVGVHVIVJVKVLVMVNVOVb xeyezeAeBeCeDeEePVQVRVSVFeTVGeHeUVXVYV3V4V5V!V/M#V$V'VIM)V*V-V)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK
212 return options 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h{e_h|e{h}e|h~e}haf~hbfaibicidieifiHNINJNnccMKNLN5 0 MNgipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwbTOUOdMVOeMWOXOYOZO0OfM1OgM2O3O4O5O6O( 8O) 9O7J8J9J!JhMiM!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkP!d#dlPmPnPoPpPqPsctcucvcwcxcjM|ckMAPCP}clMmMnMCgQMRMSM~cTMjc1Pkc2PUM3PVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M6P7P8P9P!P#P%MYJ'M(MxbyhaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg$PMcc Nc%POc'PPc(PQc)PRc*PSc+PTc,PUc-PVc.PWc/PXc:PYc)MZc*M0c;P1c=P2c?P3c@P4c[P5c]P6c^P7c_P8c`P9c{P!c|P#c}P$c~P%c(g'caQ(cbQ)ccQ*cdQeQfQ+cJcrQ:foMtQpMqMrMsMtMuMgcKcAQBQCQDQEQ,eFQGQHQIQJQKQLQMQNQOQvMwMxMyMzMAMBMCMXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%QDM'Q(QEM)Q?e-e;gLc@e[e-Q.Q/Q:QIcccdc: ecfc=Q?Q@Q,cbd+d,d-dnRoRpRlcmcwh_e`e{cIepiqisitiviwiVeWePgQgxiyiziAiBiCiDiEiFiHiIiKiLiRgSgMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXeYe9iQfXgYg!i#iZg0g$i%i(i)iZe0e1g2g*i+i,i-i.i/i:i;i=i@i[i^i_i3g4g`i{i|i5g6g}i7g8g~iajbjcjdjTfejfj1e2esjZf9g!gtjuj#g$g]e^eFMGMvjwjyjzjBjCjEjFjHjIjKjLjNjOjQjRjbVcV;d+M?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`coepeqeresetegVhViVjVkVlVmVnVoVpVqVrVsVtVuV,M-Mue.MHMDVEVFVGVHVIVJVKVLVMVNVOVb xeyezeAeBeCeDeEePVQVRVSVFeTVGeHeUVXVYV3V4V5V!V#V$V'VIM)V*V-V)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK
213 elif isinstance(options, dict): 2OMZKPMUJVJWJXJ0K#JYJ/M3f
214 return cls(**options) 2OMZKPMUJVJWJXJ0K/M
215 else:
216 raise TypeError( 2#JYJ3f
217 f"The {options_description} must be provided as an object " 2#JYJ3f
218 f"of type {cls.__name__} or as a dict with valid {options_description}. " 2#JYJ3f
219 f"The provided object is '{options}'." 2#JYJ3f
220 )
223def _handle_boolean_option(option: bool) -> str:
224 """
225 Convert a boolean option to a string representation.
226 """
227 return "true" if bool(option) else "false" 2Mcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,clcmc-c.c/c;c[c]c^c_c`clX
230def precondition(checker: Callable[..., None], str what="") -> Callable[..., Any]:
231 """
232 A decorator that adds checks to ensure any preconditions are met.
234 Args:
235 checker: The function to call to check whether the preconditions are met. It has
236 the same signature as the wrapped function with the addition of the keyword argument `what`.
237 what: A string that is passed in to `checker` to provide context information.
239 Returns:
240 Callable: A decorator that creates the wrapping.
241 """
243 def outer(wrapped_function: Callable) -> Callable: 2$J
244 """
245 A decorator that actually wraps the function for checking preconditions.
246 """
248 @functools.wraps(wrapped_function) 2$J
249 def inner(*args, **kwargs) -> Any:
250 """
251 Check preconditions and if they are met, call the wrapped function.
252 """
253 checker(*args, **kwargs, what=what) 2$J
254 result = wrapped_function(*args, **kwargs) 2$J
256 return result 2$J
258 return inner 2$J
260 return outer 2$J
263def is_sequence(obj: object) -> bool:
264 """
265 Check if the given object is a sequence (list or tuple).
266 """
267 return isinstance(obj, Sequence) 2( ) |c}cQMRMSMTMjckcUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(MxbyhdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf)M*M+Mhcic:c=c?c@cmXnXoXpXqX,M-MrXsXtX#W$W.M[f]f^f_f`f{fuXvX
270def is_nested_sequence(obj: object) -> bool:
271 """
272 Check if the given object is a nested sequence (list or tuple with atleast one list or tuple element).
273 """
274 return is_sequence(obj) and any(is_sequence(elem) for elem in obj) 2hcic#W$W
278class Transaction:
279 """
280 A context manager for transactional operations with undo capability.
282 The Transaction class allows you to register undo actions (callbacks) that will be executed
283 if the transaction is not committed before exiting the context. This is useful for managing
284 resources or operations that need to be rolled back in case of errors or early exits.
286 Usage:
287 with Transaction() as txn:
288 txn.append(some_cleanup_function, arg1, arg2)
289 # ... perform operations ...
290 txn.commit() # Disarm undo actions; nothing will be rolled back on exit
292 Methods:
293 append(fn, *args, **kwargs): Register an undo action to be called on rollback.
294 commit(): Disarm all undo actions; nothing will be rolled back on exit.
295 """
296 def __init__(self) -> None:
297 self._stack = ExitStack() 2ccdc: ecfc
298 self._entered = False 2ccdc: ecfc
300 def __enter__(self):
301 self._stack.__enter__() 2ccdc: ecfc
302 self._entered = True 2ccdc: ecfc
303 return self 2ccdc: ecfc
305 def __exit__(self, exc_type, exc, tb):
306 # If exit callbacks remain, they'll run in LIFO order.
307 self._entered = False 2ccdc: ecfc
308 return self._stack.__exit__(exc_type, exc, tb) 2ccdc: ecfc
310 def append(self, fn: Callable[..., Any], /, *args: Any, **kwargs: Any) -> None:
311 """
312 Register an undo action (runs if the with-block exits without commit()).
313 Values are bound now via partial so late mutations don't bite you.
314 """
315 if not self._entered: 2ccdc: ecfc
316 raise RuntimeError("Transaction must be entered before append()")
317 self._stack.callback(partial(fn, *args, **kwargs)) 2ccdc: ecfc
319 def commit(self) -> None:
320 """
321 Disarm all undo actions. After this, exiting the with-block does nothing.
322 """
323 # pop_all() empties this stack so no callbacks are triggered on exit.
324 self._stack.pop_all() 2ccdc: ecfc
327# Track whether we've already warned about fork method
328_fork_warning_checked = False
331def reset_fork_warning() -> None:
332 """Reset the fork warning check flag for testing purposes.
334 This function is intended for use in tests to allow multiple test runs
335 to check the warning behavior.
336 """
337 global _fork_warning_checked
338 _fork_warning_checked = False 2wh_e`e{cxhIe
341cdef inline tuple _read_fill_ptr(const char* ptr, Py_ssize_t width):
342 """Extract (value, element_size) from a raw pointer of known width."""
343 cdef unsigned int val
344 if width == 1: 2%K'K(K)K*K+K,K-K.K/K:K;KJMqb4b6 Vb7 5bWb8 e Jbf g h i j k l m n Kbo p q r ybs t zbLb6b9 Xb! 7bYb# u Nbv w x y z A B C D ObE F G H AbI J BbPb8b$ Zb% 9b0b' K RbL M N O P Q R S T SbU V W X CbY Z DbTb
345 val = (<uint8_t*>ptr)[0] 16fghop9vwxEF$LMNUV
346 elif width == 2:
347 val = (<uint16_t*>ptr)[0] 2%K(K*K,K.K:KVb7 i j k q r ybXb! y z A G H AbZb% O P Q W X Cb
348 elif width == 4:
349 val = (<uint32_t*>ptr)[0] 2'K)K+K-K/K;KqbWb8 e l m n s t zbYb# u B C D I J Bb0b' K R S T Y Z Db
350 else:
351 raise ValueError(f"value must be 1, 2, or 4 bytes, got {width}") 2JM4b5bJbKbLb6b7bNbObPb8b9bRbSbTb
352 return (val, <unsigned int>width) 2%K'K(K)K*K+K,K-K.K/K:K;Kqb6 Vb7 Wb8 e f g h i j k l m n o p q r ybs t zb9 Xb! Yb# u v w x y z A B C D E F G H AbI J Bb$ Zb% 0b' K L M N O P Q R S T U V W X CbY Z Db
355cpdef tuple _parse_fill_value(value):
356 """Parse a fill/memset value into (raw_value, element_size).
358 Parameters
359 ----------
360 value : int or buffer-protocol object
361 - int: Must be in range [0, 256). Treated as 1-byte fill.
362 - bytes or buffer-protocol: Must be 1, 2, or 4 bytes.
364 Returns
365 -------
366 tuple of (int, int)
367 (raw_value, element_size) where element_size is 1, 2, or 4.
369 Raises
370 ------
371 OverflowError
372 If int value is outside [0, 256).
373 TypeError
374 If value is not an int and does not support the buffer protocol.
375 ValueError
376 If value byte length is not 1, 2, or 4.
377 """
378 cdef uint8_t byte_val
379 cdef Py_buffer buf
381 if isinstance(value, int): 2RKSKTKUKVKWKXKYK.V/V%K'K:V;V(K)K=V?V*K+K@V[V,K-K]V^V.K/K_V`V:K;KJM5 0 ;b=b-b?b@b[b]b^bqb`K1 2 3 4 ocpc7f8f{K|K}K`o|oqcrc_b`bcL{b4edL|b* + , }b- . / /f~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb{V|V}V;w~VaWbWcW1KdWeW2KKfOfQf3K4KfWgWhWiWjWkW5KlW6KmWnWTAoWpWqWrW7KsWtW8KTfXfZf9K!KuWvWwWxWyWzW#KAW$KBWCWDWEWFWGWHWIW
382 byte_val = value 2RKSKTKUKVKWKXKYK.V/V:V;V=V?V@V[V]V^V_V`V5 0 ;b=b-b?b@b[b]b^b`K1 2 3 4 ocpc7f8f{K|K}K`o|oqcrc_b`bcL{b4edL|b* + , }b- . / /fIbzcAcBcMbCcDcEcQbFcGcHc{V|V}V;w~VaWbWcW1KdWeW2KKfOfQf3K4KfWgWhWiWjWkW5KlW6KmWnWTAoWpWqWrW7KsWtW8KTfXfZf9K!KuWvWwWxWyWzW#KAW$KBWCWDWEWFWGWHWIW
383 return (<unsigned int>byte_val, <unsigned int>1) 2RKSKTKUKVKWKXKYK.V/V:V;V=V?V@V[V]V^V_V`V5 0 ;b=b-b?b@b[b]b^b`K1 2 3 4 ocpc7f8f{K|K}K`o|oqcrc_b`bcL{b4edL|b* + , }b- . / /fIbMbQb{V|V}V;w~VaWbWcW1KdWeW2KKfOfQf3K4KfWgWhWiWjWkW5KlW6KmWnWTAoWpWqWrW7KsWtW8KTfXfZf9K!KuWvWwWxWyWzW#KAW$KBWCWDWEWFWGWHWIW
385 if isinstance(value, bytes): 2%K'K(K)K*K+K,K-K.K/K:K;KJMqb~b4b6 Vb7 5bWb8 e Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# u Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' K RbL M N O P Q R S T SbU V W X CbY Z DbTb
386 return _read_fill_ptr(<const char*><bytes>value, <Py_ssize_t>len(value)) 2%K'K(K)K*K+K,K-K.K/K:K;KJM4b6 Vb7 5bWb8 6b9 Xb! 7bYb# 8b$ Zb% 9b0b'
388 if PyObject_GetBuffer(value, &buf, PyBUF_SIMPLE) != 0: 2qb~be Jbf g h i j k l m n Kbo p q r ybs t zbLbacu Nbv w x y z A B C D ObE F G H AbI J BbPbbcK RbL M N O P Q R S T SbU V W X CbY Z DbTb
389 raise TypeError(
390 f"value must be an int or support the buffer protocol, "
391 f"got {type(value).__name__}"
392 )
393 try: 2qbe Jbf g h i j k l m n Kbo p q r ybs t zbLbu Nbv w x y z A B C D ObE F G H AbI J BbPbK RbL M N O P Q R S T SbU V W X CbY Z DbTb
394 return _read_fill_ptr(<const char*>buf.buf, buf.len) 2qbe Jbf g h i j k l m n Kbo p q r ybs t zbLbu Nbv w x y z A B C D ObE F G H AbI J BbPbK RbL M N O P Q R S T SbU V W X CbY Z DbTb
395 finally:
396 PyBuffer_Release(&buf)
399def check_multiprocessing_start_method() -> None:
400 """Check if multiprocessing start method is 'fork' and warn if so."""
401 global _fork_warning_checked
402 if _fork_warning_checked: 2%W'WdMeM(W)W*W+WfMgM( ) UJVJ7J8JWJXJ9J!J%J,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgX+g,g-g.g!d#d/g:ghXiXjXkXsctcucvcwcxcwh_e`e{cxhIe
403 return 2%W'WdMeM(W)W*W+WfMgM( ) UJVJ7J8JWJXJ9J!J%J,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgX+g,g-g.g!d#d/g:ghXiXjXkXsctcucvcwcxcIe
404 _fork_warning_checked = True 2%Jwh_e`e{cxhIe
406 # Common warning message parts
407 common_message = (
408 "CUDA does not support. Forked subprocesses exhibit undefined behavior, " 2%Jwh_e`e{cxhIe
409 "including failure to initialize CUDA contexts and devices. Set the start method "
410 "to 'spawn' before creating processes that use CUDA. "
411 "Use: multiprocessing.set_start_method('spawn')"
412 )
414 try: 2%Jwh_e`e{cxhIe
415 start_method = multiprocessing.get_start_method() 2%Jwh_e`e{cxhIe
416 if start_method == "fork": 2%Jwh_e`e{cIe
417 message = f"multiprocessing start method is 'fork', which {common_message}" 2_e`e{cIe
418 warnings.warn(message, UserWarning, stacklevel=3) 2_e`e{cIe
419 except RuntimeError: 2xh
420 # get_start_method() can raise RuntimeError if start method hasn't been set
421 # In this case, default is 'fork' on Linux, so we should warn
422 if platform.system() == "Linux": 2xh
423 message = (
424 f"multiprocessing start method is not set and defaults to 'fork' on Linux, " 2xh
425 f"which {common_message}"
426 )
427 warnings.warn(message, UserWarning, stacklevel=3) 2xh