Coverage for cuda/core/_utils/cuda_utils.pyx: 93.46%
214 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +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 2zft AfBfu v CfDfEf6dFfGfHfIf7dJfKfLf8dw x y z A B C D E F G H I J K L M N O P Q R S T U V MfNfOfPfQfRfMhNhOhPhneQhRhoeShpeThqeUhreVhseWhXhYhZh0h1hj e 2hSfvbTf3h9d!d#d$d%dW f g h i X Y Z 0 wbxbyb'd6b7b8bUfVfWfXfYfZf4h5h6h7h9b!b#b8h$b%b'b(d9hIb1 )d*d0f1f2f3fYb4f2 k l ?c@c5f[cecfc3 6g7g;K=K?K!hte@K[K]K^K#h6f7f]cuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,f$h_K%h`K{K|K}K^cgchc'h(h)h*h+h,h-h.h-f.f%e/f:f/h:h;h=h?h@h[h]h^h_h`h{h|h}h~h;f=f'eaibici?f@fdi[f]feifigihiii(ejikili+dmini)e*eoipiqirisi+e,dti,e-euiviwixi.e^f_fyizi`f{f/eAiBiCiDiEi|f}f:e~fagFiGiHiIiJiKiLiMiNiOiPiQiRiSiTibgcg;eUiViWidgegXifgggYiZi0i1i2i=e3i4i5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i*i_ehgig+i,ijgkg`e-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgj8grKsKcK~K9g
52 if isinstance(cfg, int): 2zft AfBfu v CfDfEf6dFfGfHfIf7dJfKfLf8dw x y z A B C D E F G H I J K L M N O P Q R S T U V MfNfOfPfQfRfMhNhOhPhneQhRhoeShpeThqeUhreVhseWhXhYhZh0h1hj e 2hSfvbTf3h9d!d#d$d%dW f g h i X Y Z 0 wbxbyb'd6b7b8bUfVfWfXfYfZf4h5h6h7h9b!b#b8h$b%b'b(d9hIb1 )d*d0f1f2f3fYb4f2 k l ?c@c5f[cecfc3 6g7g;K=K?K!hte@K[K]K^K#h6f7f]cuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,f$h_K%h`K{K|K}K^cgchc'h(h)h*h+h,h-h.h-f.f%e/f:f/h:h;h=h?h@h[h]h^h_h`h{h|h}h~h;f=f'eaibici?f@fdi[f]feifigihiii(ejikili+dmini)e*eoipiqirisi+e,dti,e-euiviwixi.e^f_fyizi`f{f/eAiBiCiDiEi|f}f:e~fagFiGiHiIiJiKiLiMiNiOiPiQiRiSiTibgcg;eUiViWidgegXifgggYiZi0i1i2i=e3i4i5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i*i_ehgig+i,ijgkg`e-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgj8grKsKcK~K9g
53 cfg = (cfg,) 2zft AfBfu v CfDfEf6dFfGfHfIf7dJfKfLf8dw x y z A B C D E F G H I J K L M N O P Q R S T U V MfNfOfPfQfRfMhNhOhQhShThUhVhWhXhYhZh0h1hj e 2hSfvbTf3h9d!d#d$d%dW f g h i X Y Z 0 wbxbyb'd6b7b8bUfVfWfXfYfZf4h5h6h7h9b!b#b8h$b%b'b(d9hIb1 )d*d0f1f2f3fYb4f2 k l ?c@c5f[cecfc3 6g7g;K=K?Kte@K[K]K^K6f7fuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,f_K`K{K|K}K^cgchc'h(h*h+h-h.h-f.f/f:f/h:h;h=h?h@h[h]h^h`h{h}h~h;f=faibici?f@fdi[f]feifigihiii(ejiki+d,dxi.e^f_fyizi`f{fAiBiDiEi|f}f~fagFiGiHiIiJiKiLiMiNiPiQiSiTibgcgUiViWidgegXifgggYiZi0i1i2i=e3i4i-d.d*i_ehgig+i,ijgkg-i.i:i;i?i@i]i^i`i{i}i~ibjcjejfj8grK
54 else:
55 common = "must be an int, or a tuple with up to 3 ints" 2PhneRhoepeqerese6b7b8b9b!b#b$b%b'b7g!hte#h]c$h%h)h,h%e_h|h'eli+dmini)e*eoipiqirisi+e,dti,e-euiviwi/eCi:eOiRi;e5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i`e/i=i[i_i|iajdjgj8gsKcK~K9g
56 if not isinstance(cfg, tuple): 2PhneRhoepeqerese6b7b8b9b!b#b$b%b'b7g!hte#h]c$h%h)h,h%e_h|h'eli+dmini)e*eoipiqirisi+e,dti,e-euiviwi/eCi:eOiRi;e5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i`e/i=i[i_i|iajdjgj8gsKcK~K9g
57 raise ValueError(f"{label} {common} (got {type(cfg)})") 2~K
58 if len(cfg) > 3: 2PhneRhoepeqerese6b7b8b9b!b#b$b%b'b7g!hte#h]c$h%h)h,h%e_h|h'eli+dmini)e*eoipiqirisi+e,dti,e-euiviwi/eCi:eOiRi;e5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i`e/i=i[i_i|iajdjgj8gsKcK9g
59 raise ValueError(f"{label} {common} (got tuple with length {len(cfg)})") 2sK
60 if any(not isinstance(val, int) for val in cfg): 2PhneRhoepeqerese6b7b8b9b!b#b$b%b'b7g!hte#h]c$h%h)h,h%e_h|h'eli+dmini)e*eoipiqirisi+e,dti,e-euiviwi/eCi:eOiRi;e5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i`e/i=i[i_i|iajdjgj8gcK9g
61 raise ValueError(f"{label} {common} (got {cfg})") 2cK
62 if any(val < 1 for val in cfg): 2zft AfBfu v CfDfEf6dFfGfHfIf7dJfKfLf8dw x y z A B C D E F G H I J K L M N O P Q R S T U V MfNfOfPfQfRfMhNhOhPhneQhRhoeShpeThqeUhreVhseWhXhYhZh0h1hj e 2hSfvbTf3h9d!d#d$d%dW f g h i X Y Z 0 wbxbyb'd6b7b8bUfVfWfXfYfZf4h5h6h7h9b!b#b8h$b%b'b(d9hIb1 )d*d0f1f2f3fYb4f2 k l ?c@c5f[cecfc3 6g7g;K=K?K!hte@K[K]K^K#h6f7f]cuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,f$h_K%h`K{K|K}K^cgchc'h(h)h*h+h,h-h.h-f.f%e/f:f/h:h;h=h?h@h[h]h^h_h`h{h|h}h~h;f=f'eaibici?f@fdi[f]feifigihiii(ejikili+dmini)e*eoipiqirisi+e,dti,e-euiviwixi.e^f_fyizi`f{f/eAiBiCiDiEi|f}f:e~fagFiGiHiIiJiKiLiMiNiOiPiQiRiSiTibgcg;eUiViWidgegXifgggYiZi0i1i2i=e3i4i5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i*i_ehgig+i,ijgkg`e-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgj8grK9g
63 plural_s = "" if len(cfg) == 1 else "s" 2terK9g
64 raise ValueError(f"{label} value{plural_s} must be >= 1 (got {cfg_orig})") 2terK9g
65 return cfg + (1,) * (3 - len(cfg)) 2zft AfBfu v CfDfEf6dFfGfHfIf7dJfKfLf8dw x y z A B C D E F G H I J K L M N O P Q R S T U V MfNfOfPfQfRfMhNhOhPhneQhRhoeShpeThqeUhreVhseWhXhYhZh0h1hj e 2hSfvbTf3h9d!d#d$d%dW f g h i X Y Z 0 wbxbyb'd6b7b8bUfVfWfXfYfZf4h5h6h7h9b!b#b8h$b%b'b(d9hIb1 )d*d0f1f2f3fYb4f2 k l ?c@c5f[cecfc3 6g7g;K=K?K!hte@K[K]K^K#h6f7f]cuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,f$h_K%h`K{K|K}K^cgchc'h(h)h*h+h,h-h.h-f.f%e/f:f/h:h;h=h?h@h[h]h^h_h`h{h|h}h~h;f=f'eaibici?f@fdi[f]feifigihiii(ejikili+dmini)e*eoipiqirisi+e,dti,e-euiviwixi.e^f_fyizi`f{f/eAiBiCiDiEi|f}f:e~fagFiGiHiIiJiKiLiMiNiOiPiQiRiSiTibgcg;eUiViWidgegXifgggYiZi0i1i2i=e3i4i5i-d6i7i?e@e8i9i!i#i$i[e.d%i]e^e'i(i)i*i_ehgig+i,ijgkg`e-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgj8g
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:
72 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev))
73 return <int>dev
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 lg
115 if handle != NULL: 2a c lg
116 cynvjitlink.nvJitLinkGetErrorLogSize(handle, &logsize) 1c
117 cdef bytes log_bytes
118 cdef str log_str = "" 2c lg
119 if logsize > 1 and handle != NULL: 2c lg
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 lg
125 if log_str: 2c lg
126 exc.args = (exc.args[0] + f"\nnvJitLink error log: {log_str}", *exc.args[1:]) 1c
127 raise exc 2c lg
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 hjijjjkj{eljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHj6dIjJjKjLjMjNjOjPj7dQjRjSjTjUj/dVjWj8dXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@jdK[j]j^jeK_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmfKCmDmEmFmGmHmImJmgKKmLmMmNmOmPmhKQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhnaLinjnj kne lnmnnnonvbpnqnrnsntn*bun+bvn(bwnxn,byn-bzn.bAn/bBnCnDn:bEnFnGnHnInJnKnLnMnNniKOnPn9dQn!dRn#dSn$dTn%dUnVnWnXnYnW Zn0n1nbL2n3nmg4njK5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n'd`n{n|n}n~naobo6bco7bdo8beo|efo}ego~ehojciokcjokolomonoooUfpoVfqoWfrosotouovowoxoafyobfzoAoBoCoDoEoXfFoYfGoZfHoMXIoNXJoOXKocLLodLMoNoOoPoQoPXRoeLSoToUoVoWoXoYo9bZo!b0o#b1ofL2ogL3ohL4o5o6o7o8o9o!ong#o$o%o'o(o$b)o%b*o'b+ocf,odf-oef.olc/omc:o;o(d=o?o;b@o=b[o#g]off^oiL_oIb`o{o|o}o~o1 ap)dbp*dcpdpepfpgphpYbipjp2 kplpmpnp?bop;dtKpp=duKqp{crp|cspQXvKtpjLupkLvpwpxpwKyp@bzp}cApxKBp?dyKCpm Dpn Epo Fp~cGp@dzKHp[dAKIp]dBKJp^dCKKpDKLpEKMpFKNpGKOpHKPpIKQpJKRpKKSplLTpmLUpRXVpSXWpTXXp[bYp$gZp%g0pp 1pq 2pUX3pr 4p'g5pnL6p(g7poL8p)g9p*g!ppL#p+g$pVX%p,g'p-g(p.g)p/g*p+pgfhf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`q{q|q}q~qarbrcrdrkKkherfrgrhrirjrkrlrmrnrorprqrrr|dsrtrurvrwrxryrzrArBrCrDrErFrGr?cHrIrJrKrLrMrNrOr@cPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r[c?rec@rfc[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMs6fNs7fOsPsuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,fQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]snhoh~daebecephqhrhshthuhvhwh^s_s]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDhhe_uie`u{uEh|uje}u~uugavbvcvdvevfvgvCchvivjvkvlvmvnv}b~bs acovbcpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvrfFvGvHvIvJvKv^cLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1v2v3v4v5v6v7v8v9v!vgc#vhc$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHGhvgeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_IqL`I{I|I}I~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
136 return 0 2a hjijjjkj{eljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHj6dIjJjKjLjMjNjOjPj7dQjRjSjTjUj/dVjWj8dXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhnaLinjnj kne lnmnnnonvbpnqnrnsntn*bun+bvn(bwnxn,byn-bzn.bAn/bBnCnDn:bEnFnGnHnInJnKnLnMnNnOnPn9dQn!dRn#dSn$dTn%dUnVnWnXnYnW Zn0n1nbL2n3n4n5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n'd`n{n|n}n~naobo6bco7bdo8beo|efo}ego~ehojciokcjokolomonoooUfpoVfqoWfrosotouovowoxoafyobfzoAoBoCoDoEoXfFoYfGoZfHoMXIoNXJoOXKocLLodLMoNoOoPoQoPXRoeLSoToUoVoWoXoYo9bZo!b0o#b1ofL2ogL3ohL4o5o6o7o8o9o!o#o$o%o'o(o$b)o%b*o'b+ocf,odf-oef.olc/omc:o;o(d=o?o;b@o=b[o#g]off^oiL_oIb`o{o|o}o~o1 ap)dbp*dcpdpepfpgphpipjp2 kplpmpnp?bop;dtKpp=duKqp{crp|cspQXvKtpjLupkLvpwpxpwKyp@bzp}cApxKBp?dyKCpm Dpn Epo Fp~cGp@dzKHp[dAKIp]dBKJp^dCKKpDKLpEKMpFKNpGKOpHKPpIKQpJKRpKKSplLTpmLUpRXVpSXWpTXXp[bYp$gZp%g0pp 1pq 2pUX3pr 4p'g5pnL6p(g7poL8p)g9p*g!ppL#p+g$pVX%p,g'p-g(p.g)p/g*p+pgfhf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`q{q|q}q~qarbrcrdrkherfrgrhrirjrkrlrmrnrorprqrrr|dsrtrurvrwrxryrzrArBrCrDrErFrGr?cHrIrJrKrLrMrNrOr@cPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r[c?rec@rfc[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMs6fNs7fOsPsuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,fQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]snhoh~daebecephqhrhshthuhvhwh^s_s]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDh_uie`u{uEh|uje}u~uavbvcvdvevfvgvCchvivjvkvlvmvnv}b~bs acovbcpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvrfFvGvHvIvJvKv^cLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1v2v3v4v5v6v7v8v9v!vgc#vhc$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHGheHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_IqL`I{I|I}I~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
137 cdef const char* name
138 name_err = cydriver.cuGetErrorName(error, &name) 2dKeKfKgKhKiKmgjKngIbYbm n o p q r kKkhheugs 5bvg
139 if name_err != cydriver.CUresult.CUDA_SUCCESS: 2dKeKfKgKhKiKmgjKngIbYbm n o p q r kKkhheugs 5bvg
140 raise CUDAError(f"UNEXPECTED ERROR CODE: {error}") 2kh
141 with gil: 2dKeKfKgKhKiKmgjKngIbYbm n o p q r kKkhheugs 5bvg
142 # TODO: consider lower this to Cython
143 expl = DRIVER_CU_RESULT_EXPLANATIONS.get(int(error)) 2dKeKfKgKhKiKmgjKngIbYbm n o p q r kKkhheugs 5bvg
144 if expl is not None: 2dKeKfKgKhKiKmgjKngIbYbm n o p q r kKkhheugs 5bvg
145 raise CUDAError(f"{name.decode()}: {expl}") 2dKeKfKgKhKiKmgjKngIbYbm n o p q r kKkhheugs 5bvg
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: 2HhrLwgIhJhKhLh
155 return 0 2HhwgIhJhKhLh
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 2rLwg
159 expl = RUNTIME_CUDA_ERROR_EXPLANATIONS.get(int(error)) 2rLwg
160 if expl is not None: 2rLwg
161 raise CUDAError(f"{name}: {expl}") 2rLwg
162 desc_err, desc = runtime.cudaGetErrorString(error) 2wg
163 if desc_err != _RUNTIME_SUCCESS: 2wg
164 raise CUDAError(f"{name}")
165 desc = desc.decode() 2wg
166 raise CUDAError(f"{name}: {desc}") 2wg
169cpdef inline int _check_nvrtc_error(error, handle=None) except?-1:
170 if error == _NVRTC_SUCCESS: 2a `JsLEcc FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#cddedfdxggdyghdzgidAgBgjdkdldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cd JdKdLdMdNdOdPdQdCgRdSdTdb UdtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gVdWdXdYdZd0d1d2d3d4d
171 return 0 2a sLEcc FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#cddedfdxggdyghdzgidAgBgjdkdldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cd JdKdLdMdNdOdPdQdCgRdSdTdb UdtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gVdWdXdYdZd0d1d2d3d4d
172 err = f"{error}: {nvrtc.nvrtcGetErrorString(error)[1].decode()}" 2`JsL
173 if handle is not None: 2`JsL
174 _, logsize = nvrtc.nvrtcGetProgramLogSize(handle) 2`J
175 log = b" " * logsize 2`J
176 _ = nvrtc.nvrtcGetProgramLog(handle, log) 2`J
177 err += f", compilation log:\n\n{log.decode('utf-8', errors='backslashreplace')}" 2`J
178 raise NVRTCError(err) 2`JsL
181cdef inline int _check_error(error, handle=None) except?-1:
182 if isinstance(error, driver.CUresult): 2a hjijjjkj{eljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUj/dVjWjXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhninjnj kne lnmnnnonvbpnqnrnsntn*bun+bvn(bwnxn,byn-bzn.bAn/bBnCnDn:bEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeo|efo}ego~ehojciokcjokolomonooopoqorosotouovowoxoafyobfzoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o6o8o9o!o#o$o%o'o(o)o*o+ocf,odf-oef.olc/omc:o;o=o?o;b@o=b[o#g]off^o_o`o{o|o}o~o1 apbpcpdpepfpgphpipjp2 kplpmpnp?bop;dpp=dqp{crp|csptpupvpwpxpyp@bzp}cApBp?dCpm Dpn Epo Fp~cGp@dHp[dIp]dJp^dKpLpMpNpOpPpQpRpSpTpUpVpWpXp[bYp$gZp%g0pp 1pq 2p3pr 4p'g5p6p(g7p8p)g9p*g!p#p+g$p%p,g'p-g(p.g)p/g*p+pgfhf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`q{qHh|q}q~qarbrcrdrerIhfrgrhrirjrkrlrmrnrorJhprqrrr|dsrtrurvrwrxryrzrArBrKhCrDrLhErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMsNsOsPsQsRsSsEcTsc FcUsGcVsHcWsIcXsJcYsKcZsLc0sMc1sNc2sOc3sPc4sQc5sRc6sSc7sTc8sUc9sVc!sWc#sXc$sYc%sZc's0c(s1c)s2c*s3c+s4c,s5c-s6c.s7c/s8c:s9c;s=s!c?s@s[s]snhoh~daebecephqhrhshthuhvhwh^s_s]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDh_uie`u{uEh|uje}u~uavbvcvdvevfvgvCchvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBv#cCvDvEvrfFvGvHvIvJvKvLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1vdd2ved3vfd4v5v6v7vxggd8vyghd9vzgid!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~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQEAgRESETEBgUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!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~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGjdRGkdSGldTGmdUGndVGodWGpdXG$cYG%cZG'c0Gqd1Grd2Gsd3Gtd4Gcc5Gdc6G(c7Gud8G)c9Gvd!Gwd#Gxd$Gyd%G*c'Gzd(G+c)G,c*G-c+G.c,GAd-GBd.GCd/GDd:GEd;GFd=GGd?GHd@GId[G/c]G:c^G;c_G`Gd {GJd|GKd}GLd~GMdaHNdbHOdcHPddHQdGhCgeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHRdtHuHvHSdwHxHyHzHAHBHTdCHDHEHFHGHb HHUdIHtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgJHRgSgTgUgVgWgXgYgZg0gKHLHMHNH1g2g3gVdWdXdYdZdOH0d1d2d3d4dPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!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~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
183 return _check_driver_error(error) 2a hjijjjkj{eljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUj/dVjWjXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhninjnj kne lnmnnnonvbpnqnrnsntn*bun+bvn(bwnxn,byn-bzn.bAn/bBnCnDn:bEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeo|efo}ego~ehojciokcjokolomonooopoqorosotouovowoxoafyobfzoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o6o8o9o!o#o$o%o'o(o)o*o+ocf,odf-oef.olc/omc:o;o=o?o;b@o=b[o#g]off^o_o`o{o|o}o~o1 apbpcpdpepfpgphpipjp2 kplpmpnp?bop;dpp=dqp{crp|csptpupvpwpxpyp@bzp}cApBp?dCpm Dpn Epo Fp~cGp@dHp[dIp]dJp^dKpLpMpNpOpPpQpRpSpTpUpVpWpXp[bYp$gZp%g0pp 1pq 2p3pr 4p'g5p6p(g7p8p)g9p*g!p#p+g$p%p,g'p-g(p.g)p/g*p+pgfhf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr|dsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]snhoh~daebecephqhrhshthuhvhwh^s_s]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDh_uie`u{uEh|uje}u~uavbvcvdvevfvgvCchvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvrfFvGvHvIvJvKvLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1v2v3v4v5v6v7v8v9v!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~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHGheHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!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~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
184 elif isinstance(error, runtime.cudaError_t): 2a HhIhJhKhLhEcc FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#cddedfdxggdyghdzgidAgBgjdkdldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cd JdKdLdMdNdOdPdQdCgRdSdTdb UdtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gVdWdXdYdZd0d1d2d3d4d
185 return _check_runtime_error(error) 2HhIhJhKhLh
186 elif isinstance(error, nvrtc.nvrtcResult): 2a Ecc FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#cddedfdxggdyghdzgidAgBgjdkdldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cd JdKdLdMdNdOdPdQdCgRdSdTdb UdtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gVdWdXdYdZd0d1d2d3d4d
187 return _check_nvrtc_error(error, handle=handle) 2a Ecc FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#cddedfdxggdyghdzgidAgBgjdkdldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cd JdKdLdMdNdOdPdQdCgRdSdTdb UdtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gVdWdXdYdZd0d1d2d3d4d
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 hjijjjkj{eljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUj/dVjWjXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhninjnj kne lnmnnnonvbpnqnrnsntn*bun+bvn(bwnxn,byn-bzn.bAn/bBnCnDn:bEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeo|efo}ego~ehojciokcjokolomonooopoqorosotouovowoxoafyobfzoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o6o8o9o!o#o$o%o'o(o)o*o+ocf,odf-oef.olc/omc:o;o=o?o;b@o=b[o#g]off^o_o`o{o|o}o~o1 apbpcpdpepfpgphpipjp2 kplpmpnp?bop;dpp=dqp{crp|csptpupvpwpxpyp@bzp}cApBp?dCpm Dpn Epo Fp~cGp@dHp[dIp]dJp^dKpLpMpNpOpPpQpRpSpTpUpVpWpXp[bYp$gZp%g0pp 1pq 2p3pr 4p'g5p6p(g7p8p)g9p*g!p#p+g$p%p,g'p-g(p.g)p/g*p+pgfhf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`q{qHh|q}q~qarbrcrdrerIhfrgrhrirjrkrlrmrnrorJhprqrrr|dsrtrurvrwrxryrzrArBrKhCrDrLhErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMsNsOsPsQsRsSsEcTsc FcUsGcVsHcWsIcXsJcYsKcZsLc0sMc1sNc2sOc3sPc4sQc5sRc6sSc7sTc8sUc9sVc!sWc#sXc$sYc%sZc's0c(s1c)s2c*s3c+s4c,s5c-s6c.s7c/s8c:s9c;s=s!c?s@s[s]snhoh~daebecephqhrhshthuhvhwh^s_s]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDh_uie`u{uEh|uje}u~uavbvcvdvevfvgvCchvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBv#cCvDvEvrfFvGvHvIvJvKvLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1vdd2ved3vfd4v5v6v7vxggd8vyghd9vzgid!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~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQEAgRESETEBgUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!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~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGjdRGkdSGldTGmdUGndVGodWGpdXG$cYG%cZG'c0Gqd1Grd2Gsd3Gtd4Gcc5Gdc6G(c7Gud8G)c9Gvd!Gwd#Gxd$Gyd%G*c'Gzd(G+c)G,c*G-c+G.c,GAd-GBd.GCd/GDd:GEd;GFd=GGd?GHd@GId[G/c]G:c^G;c_G`Gd {GJd|GKd}GLd~GMdaHNdbHOdcHPddHQdGhCgeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHRdtHuHvHSdwHxHyHzHAHBHTdCHDHEHFHGHb HHUdIHtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgJHRgSgTgUgVgWgXgYgZg0gKHLHMHNH1g2g3gVdWdXdYdZdOH0d1d2d3d4dPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!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~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
194 cdef int out_len = len(result) 2a hjijjjkj{eljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUj/dVjWjXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhninjnj kne lnmnnnonvbpnqnrnsntn*bun+bvn(bwnxn,byn-bzn.bAn/bBnCnDn:bEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeo|efo}ego~ehojciokcjokolomonooopoqorosotouovowoxoafyobfzoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o6o8o9o!o#o$o%o'o(o)o*o+ocf,odf-oef.olc/omc:o;o=o?o;b@o=b[o#g]off^o_o`o{o|o}o~o1 apbpcpdpepfpgphpipjp2 kplpmpnp?bop;dpp=dqp{crp|csptpupvpwpxpyp@bzp}cApBp?dCpm Dpn Epo Fp~cGp@dHp[dIp]dJp^dKpLpMpNpOpPpQpRpSpTpUpVpWpXp[bYp$gZp%g0pp 1pq 2p3pr 4p'g5p6p(g7p8p)g9p*g!p#p+g$p%p,g'p-g(p.g)p/g*p+pgfhf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`q{qHh|q}q~qarbrcrdrerIhfrgrhrirjrkrlrmrnrorJhprqrrr|dsrtrurvrwrxryrzrArBrKhCrDrLhErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMsNsOsPsQsRsSsEcTsc FcUsGcVsHcWsIcXsJcYsKcZsLc0sMc1sNc2sOc3sPc4sQc5sRc6sSc7sTc8sUc9sVc!sWc#sXc$sYc%sZc's0c(s1c)s2c*s3c+s4c,s5c-s6c.s7c/s8c:s9c;s=s!c?s@s[s]snhoh~daebecephqhrhshthuhvhwh^s_s]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDh_uie`u{uEh|uje}u~uavbvcvdvevfvgvCchvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBv#cCvDvEvrfFvGvHvIvJvKvLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1vdd2ved3vfd4v5v6v7vxggd8vyghd9vzgid!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~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQEAgRESETEBgUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!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~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGjdRGkdSGldTGmdUGndVGodWGpdXG$cYG%cZG'c0Gqd1Grd2Gsd3Gtd4Gcc5Gdc6G(c7Gud8G)c9Gvd!Gwd#Gxd$Gyd%G*c'Gzd(G+c)G,c*G-c+G.c,GAd-GBd.GCd/GDd:GEd;GFd=GGd?GHd@GId[G/c]G:c^G;c_G`Gd {GJd|GKd}GLd~GMdaHNdbHOdcHPddHQdGhCgeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHRdtHuHvHSdwHxHyHzHAHBHTdCHDHEHFHGHb HHUdIHtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgJHRgSgTgUgVgWgXgYgZg0gKHLHMHNH1g2g3gVdWdXdYdZdOH0d1d2d3d4dPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!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~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
195 if out_len == 1: 2a hjijjjkj{eljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUj/dVjWjXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhninjnj kne lnmnnnonvbpnqnrnsntn*bun+bvn(bwnxn,byn-bzn.bAn/bBnCnDn:bEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeo|efo}ego~ehojciokcjokolomonooopoqorosotouovowoxoafyobfzoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o6o8o9o!o#o$o%o'o(o)o*o+ocf,odf-oef.olc/omc:o;o=o?o;b@o=b[o#g]off^o_o`o{o|o}o~o1 apbpcpdpepfpgphpipjp2 kplpmpnp?bop;dpp=dqp{crp|csptpupvpwpxpyp@bzp}cApBp?dCpm Dpn Epo Fp~cGp@dHp[dIp]dJp^dKpLpMpNpOpPpQpRpSpTpUpVpWpXp[bYp$gZp%g0pp 1pq 2p3pr 4p'g5p6p(g7p8p)g9p*g!p#p+g$p%p,g'p-g(p.g)p/g*p+pgfhf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`q{qHh|q}q~qarbrcrdrerIhfrgrhrirjrkrlrmrnrorJhprqrrr|dsrtrurvrwrxryrzrArBrKhCrDrLhErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMsNsOsPsQsRsSsEcTsc FcUsGcVsHcWsIcXsJcYsKcZsLc0sMc1sNc2sOc3sPc4sQc5sRc6sSc7sTc8sUc9sVc!sWc#sXc$sYc%sZc's0c(s1c)s2c*s3c+s4c,s5c-s6c.s7c/s8c:s9c;s=s!c?s@s[s]snhoh~daebecephqhrhshthuhvhwh^s_s]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDh_uie`u{uEh|uje}u~uavbvcvdvevfvgvCchvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBv#cCvDvEvrfFvGvHvIvJvKvLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1vdd2ved3vfd4v5v6v7vxggd8vyghd9vzgid!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~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQEAgRESETEBgUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!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~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGjdRGkdSGldTGmdUGndVGodWGpdXG$cYG%cZG'c0Gqd1Grd2Gsd3Gtd4Gcc5Gdc6G(c7Gud8G)c9Gvd!Gwd#Gxd$Gyd%G*c'Gzd(G+c)G,c*G-c+G.c,GAd-GBd.GCd/GDd:GEd;GFd=GGd?GHd@GId[G/c]G:c^G;c_G`Gd {GJd|GKd}GLd~GMdaHNdbHOdcHPddHQdGhCgeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHRdtHuHvHSdwHxHyHzHAHBHTdCHDHEHFHGHb HHUdIHtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgJHRgSgTgUgVgWgXgYgZg0gKHLHMHNH1g2g3gVdWdXdYdZdOH0d1d2d3d4dPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!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~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
196 return 2t u _cv w x y z A B C D E F G H I J K L M N O P Q R S T U V !g`c:dicj e vb*b+b(b,b-b.b/b:bf g h i X Y Z 0 wbxbyb#g1 2 ?b;d=d{c|c@b}c?dm n o ~c@d[d]d^d[b$g%gp q r 'g(g)g*g+g,g-g.g/ghf:g;g=g?g@g[g]g^g_g`g{g|g`d}g{d~gahbhchdhehfhghhhihjhncocpcqcrcsc{q|d}d3 lhmhnhoh~daebecephqhrhshthuhvhwh^s_s]bZbJbKbLb0bMbNb^btcucvc4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb_b1bObPbQb2bRbSb`bwcxcyc/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb{b3bTbUbVb4bWbXb|bzcAcBcdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHbxhdeyhzhAhBheefegeChDhieEhjeCcFhGhDc
197 elif out_len == 2:
198 return result[1] 2a hjijjjkjljmjnjojpjqjrjsjtjujvjwjt xjyjzju Aj_cBjv CjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUj/dVjWjXjYjw Zjx 0jy 1jz 2jA 3jB 4jC 5jD 6jE 7jF 8jG 9jH !jI #jJ $jK %jL 'jM (jN )jO *jP +jQ ,jR -jS .jT /jU :jV ;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!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~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTm!gUmVmWmXmYmZm0m1m2m3m4m5m6m7m`c8m:d9m!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~manicbncndnenfngnhninjnkne lnmnnnonvbpnqnrnsntnunvn(bwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#nf $ng %nh 'ni (nX )nY *nZ +n0 ,nwb-nxb.nyb/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeo|efo}ego~ehojciokcjokolomonooopoqorosotouovowoxoafyobfzoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o6o8o9o!o#o$o%o'o(o)o*o+ocf,odf-oef.olc/omc:o;o=o?o;b@o=b[o#g]off^o_o`o{o|o}o~o1 apbpcpdpepfpgphpipjp2 kplpmpnp?bop;dpp=dqp{crp|csptpupvpwpxpyp@bzp}cApBp?dCpm Dpn Epo Fp~cGp@dHp[dIp]dJp^dKpLpMpNpOpPpQpRpSpTpUpVpWpXp[bYp$gZp%g0pp 1pq 2p3pr 4p'g5p6p(g7p8p)g9p*g!p#p+g$p%p,g'p-g(p.g)p/g*p+pgf,p-p.p/p:g:p;p;g=p?p=g@p[p?g]p@g^p[g_pif]g`p_d{pjfkf^glf|pmf_g}p`g~paq{gbqcq|gnfdqofeqfqgqhqiqjq`dkqlqmqnqoq}gpqqqrqsqtquqvqwq{dxqyqzqAqBqk ~gl ahCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'qbh(q)q*q+q,qogchpgdh-q.q/qqgehrgfhadghbdhhsgihtgjh:q;q=q?qnc@qoc[qpc]qqc^qrc_qsc`qHh|q}q~qarbrcrdrerIhfrgrhrirjrkrlrmrnrorJhprqrrr|dsrtrurvrwrxryrzrArBrKhCrDrLhErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r}d|r}r~rasbscdcsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDspfEsFs3 GslhmhHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]snhoh~daebecephqhrhshthuhvhwh]b`sZb{sJb|sKb}sLb~s0batMbbtNbct^bdttcetucftvcgt4 htzbit5 jt6 kt7 lt8 mt9 nt! ot# pt$ qt% rtAbst' tt( ut) vt* wt+ xt, yt- zt. AtBbBt_bCt1bDtObEtPbFtQbGt2bHtRbItSbJt`bKtwcLtxcMtycNt/ OtCbPt: Qt; Rt= St? Tt@ Ut[ Vt] Wt^ Xt_ YtDbZt` 0t{ 1t| 2t} 3t~ 4tab5tbb6tcb7tEb8t{b9t3b!tTb#tUb$tVb%t4b'tWb(tXb)t|b*tzc+tAc,tBc-tdb.tFb/teb:tfb;tgb=thb?tib@tjb[tkb]tlb^tmb_tGb`tnb{tob|tpb}tqb~trbausbbutbcuubduHbeuxhdefuguhuiuqfjukulumunuouyhzhAhBheefepuqugerusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^uChDh_uie`u{uEh|uje}u~uavbvcvdvevfvgvCchvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvrfFvGvHvIvJvKvLvMv5bNvOvPvQvRvSvTvUvVvWvsfXvYvZv0v1v2v3v4v5v6v7v8v9v!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~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwFhPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!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}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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHGheHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!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~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!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~IaJbJcJdJeJfJgJhJDciJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJkeYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J
199 else:
200 return result[1:] 2a {et u _cv /dw x y z A B C D E F G H I J K L M N O P Q R S T U V `c1 2 Ecc FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#cddedfdxggdyghdzgidAgBgjdkdldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cd JdKdLdMdNdOdPdQdCgRdSdTdb UdtfufvfwfxfyfDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gVdWdXdYdZd0d1d2d3d4d
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: 2HMIMJMKMLM{eMMNMOMPMzfQMRMSMTMUMVMt AfBfu _cv CfWMXMDfEf6dFfYMGfHfZM0MIf7d1MJfKfLf/d2M8dw x y z A B C D E F G H I J K L M N O P Q R S T U V 3M4M5M6M7M8M9M!M#MMf$M%M'MNfOfPfQfRfLKMKNKOKPKQKRKSKMhNhOh(M)MneQh*M+MoeSh,M-MpeTh.M/MqeUh:M;MreVh=M?MseWh@M[M]MXhYhZh0h`c:d^M_M`M1h{M|M}M~MictLaNbNcNdNeNaL$Lj e fN2hSfvbTfgNhNiN*b+b(bjN,b-b.b/bkNlN:b3hmNnN9d!d#d$d%dW mg%L'L(LoNpNqNf g h i X Y Z 0 wbxbybrNsNtNuNvNwNxN'dyNzNANBNCN6b7b8b|e}e~ejckcDNENUfVfWfFNGNXfYfZfHN4h5h6h7hINJNKNLNMN9b!b#bfLgLhL5o7o8hNNngONPNQNRN$b%b'bcfdfeflcmcSN(d9h;b=bIbTNUNVNWN1 )d*dXN0f1f2f3fYb4f2 )LTK*L?b+LtK=duK{cYN|cZNvK,LkL0N1N-L2N.LwK@b/L}cxK?dyKm 3Nn 4No 5N~c@dzK[dAK]dBK^dCKDKEKFKGKHKIKJKKKlL6NmL7N8N9N!N[b#N$N%Np 'Nq (Nr )N*NnL+NoL,N-NpL.N/N:N;N=N?N@Ngfhf[N]Nif^N_N_djfkflf`N{Nmf|N}Nnf~NofaObOcOdOeOfOgOhOiOjOkO`dlOmOuLnOvLoOpOqOrOsOwLtOxLuOyLvOwO{dxOyOzOAOk BOl CO{J|JlKmK}J~JnKoKzLUKALDOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'Oadbd(O)O*O+O,O-Oncocpcqcrcsc.O/O:O;O=O?OpK@O[O]O^O|d_OBL?cCL`O{O|O}O~OaPbPcPdP@cePfPgPhPDLELFL5fiPjPkPlPmPnPoPpPqPrPsPtP:L;LuPvP=L[c?LecwPfcxP@LyP[LzP]L}d^L_L`LAP{Lcd|L}L~LaMbMcMdMeMfMgMhMiMjMkMBPCPDPEPFPGPlMaKmMnM3 6g6f7f]cuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,fHPEcc FcIPGcJPHcKPIcLPJcMPKcNPLcOPMcPPNcQPOcRPPcSPQcoMRcpMScTPTcUPUcVPVcWPWcXPXcYPYcZPZc0P0c1P1c2P2c3P3c4P4c5P5clg6c6P7c7P8c8P9c9P!P#P!c~daebece$P%P'P(P)P*P+P]bZbJbKbLb0bMbNb^btcucvc4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb_b1bObPbQb2bRbSb`bwcxcyc/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb{b3bTbUbVb4bWbXb|bzcAcBcdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHbde,P-P.P/P:P;PGL=PqfHL?P@Peefe[P]P^P_PgeILJL`P{PKLLLMLNLVK|POL}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQPLpQQLqQRLrQSLsQTLtQULuQVLvQWLwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQXLOQPQYLQQRQheiejeSQTQUQugZLVQWQXQYQZQ0QCc1Q2Q3Q}b~bs acbc4Q5Q6Q#c7Q8Qrf9Q!Q#Q$Q%Q^c'Q5b(Q)Q*Q+Q,Q-Q.Q/Q:Q;Qsf=Q?Q@Q[Qddedfd]Q^Q_Qgdhdidgchc`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R4gleme=c5d8R9R!R#R$R'h%R'R(R)R(h*R+R,R-R.R/R*h:R;R=R?R+h@R[R-h]R^R.h_R-f`R{RqMrM|R}R~RaSbSsM.f%ecSWKtMdSeSfS/f:f/h:h;h=h?h@hgShS[hiS]hjSkSlS^hmSnS`hoSpSqSrS{hsStS}huSvS~hwSuM;fxSySzSASBSCSDSESFSGSHS=f'eISXKJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSaiYSZSbi0S1Sci2S?f3S4S5S6S7S8S9S!S#S@f$SYK%S'S(Sdi[f]feifigihiii(ejiki+d)e*e+e,d-exi)S*S.eZK0K+S^f,S-S.S/S:S;S=S?S@S[S_f]S1K^S_S`Syi{S|Szi}SvM`f~SaTbTcTdTeTfTgThTiTjTkT{f/elT2KmTnToTpTqTAirTsTtTuTBivTwTDixTyTEizT|fATBTwMxMCTDTETFTGTyM}f:eHT3KzMITJTKT~fagFiGiHiIiJiKiLTMTLiNTMiOTPTQTNiRTSTPiTTUTVTWTQiXTYTSiZT0TTi1TAMbg2T3T4T5T6T7T8T9T!T#T$Tcg;e%T4K'T(T)T*T+T,T-T.T/T:T;T=T?T@T[TUi]T^TVi_T`TWi{Tdg|T}T~TaUbUcUdUeUfUeggU5KhUiUjUXifgggYiZi0i1i2i=e3i4i-d?e@e[e.d^e*ikUlU_e6K7KmUhgnUoUpUqUrUsUtUuUvUwUigxU8KyUzUAU+iBUCU,iDUBMjgEUFUGUHUIUJUKULUMUNUOUPUkg`eQU9KRUSUTUUUVUWU0L1LXUYUZU-i0U1U2U3U.i4U5U6U7U8U9U:i!U#U$U%U;i'U(U)U?i*U+U,U-U@i.U/U:U]i;U=U?U@U^i[U]U^U`i_U`U{U|U{i}U~UaV}ibVcVdVeV~ifVgVhVbjiVjVkVlVcjmVnVoVpVejqVrVsVtVfjuVvVwVxVyVzVjdkdCMldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cd JdKdLdMdNdOdPdQdAV)bBVCVvgDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVDMEMSVTVUVVVRdWVXVYVZVFM2L0V1VSd2V3V4V5V6V7VTd8V9V!V#Vb UdVdWdXdYdZd0d1d$V%V'V(V2d)V3d4d*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{VGM|V}V~VaW3LbWcWdWeWfWgWhWiWjWkWlWmWnWoWpWqWrWsW!KtW#K4L5L6L7LuWvWwWxW8LyWzWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWqLQW9LRW!LSWTWbKUWDcVWWWXWYWZW0W1W2W3W4W5W6W7W8W9W!W#W$W%W'W(W)W*W+W,W-W.W/Wke:W
208 if keep_none: 2HMIMJMKMLM{eMMNMOMPMzfQMRMSMTMUMVMt AfBfu _cv CfWMXMDfEf6dFfYMGfHfZM0MIf7d1MJfKfLf/d2M8dw x y z A B C D E F G H I J K L M N O P Q R S T U V 3M4M5M6M7M8M9M!M#MMf$M%M'MNfOfPfQfRfLKMKNKOKPKQKRKSK(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M`c:d^M_M`M{MictLcNdNeNaL$Lj e SfvbTfgNhNiN*b+b(bjN,b-b.b/bkNlN:bmNnN9d!d#d$d%dW mg%L'L(LoNpNqNf g h i X Y Z 0 wbxbybrNsNtNuNvNwNxN'dyNzNANBNCN6b7b8b|e}e~ejckcDNENFNGNHNINJNKNLNMN9b!b#bfLgLhL5o7oNNngONPNQNRN$b%b'bcfdfeflcmcSN(d;b=bIbTNUNVNWN1 )d*dXN0f1f2f3fYb4f2 TK?b+LtK=duK{cYN|cZNvK,LkL0N1N-L2N.LwK@b/L}cxK?dyKm 3Nn 4No 5N~c@dzK[dAK]dBK^dCKDKEKFKGKHKIKJKKKlL6NmL7N8N9N!N[b#N$N%Np 'Nq (Nr )N*NnL+NoL,N-NpL.N/N:N;N=N?N@Ngfhf[N]Nif^N_N_djfkflf`N{Nmf|N}Nnf~NofaObOcOdOeOfOgOhOiOjOkO`dAOk l {J|JlKmK}J~JnKoKzLUKAL.O/O:O;O=O?O@O[O]O^O|d_OBL?cCL{O}O~OaPbPcPdP@cePfPgPhPDLELFL5fiPjPkPlPmPnPoPpPqPrPsPtPuPvP[cecfczP}dAPcd3 ]c~daebece$P%P'P(P)P*P+P]bZbJbKbLb0bMbNb^btcucvc4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb_b1bObPbQb2bRbSb`bwcxcyc/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb{b3bTbUbVb4bWbXb|bzcAcBcdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHbde,P-P.P/P:P;PGLHL?Peefe[P]P^P_PgeILJL`P{PKLLLMLNLVK|POL}PPLpQQLqQRLrQSLsQTLtQULuQVLvQWLwQXLYLheiejeSQTQUQZLCc1Q2Q3Q7Q8Qrf9Q!Q#Q$Q%Q^c'Q5b(Q)Q*Q+Q,Q-Q.Q/Q:Q;Qsf=Q?Q@Q[Qgdhdidgchc`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R=c8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R-f`R{RqMrM|R}R~RaSbSsM.f%ecSWKtMdSeSfS/f:fgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSuM;fxSySzSASBSCSDSESFSGSHS=f'eISXKJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S?f3S4S5S6S7S8S9S!S#S@f$SYK%S'S(S[f]f)e*e+e-e)S*SZK0K+S^f,S-S.S/S:S;S=S?S@S[S_f]S1K^S_S`S{S|S}SvM`f~SaTbTcTdTeTfTgThTiTjTkT{f/elT2KmTnToTpTqTrTsTtTuTvTwTxTyTzT|fATBTwMxMCTDTETFTGTyM}f:eHT3KzMITJTKT~fagLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1TAMbg2T3T4T5T6T7T8T9T!T#T$Tcg;e%T4K'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{Tdg|T}T~TaUbUcUdUeUfUeggU5KhUiUjUfggg?e@e[e^ekUlU6K7KmUhgnUoUpUqUrUsUtUuUvUwUigxU8KyUzUAUBUCUDUBMjgEUFUGUHUIUJUKULUMUNUOUPUkg`eQU9KRUSUTUUU0L1LXUYUZU0U1U2U3U4U5U6U7U8U9U!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~UaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVzVkdd JdAV)bBVvgSVTVUVVVWVXVYVZV2LSdTdb +V,V/V:V;V=V]V^V_V`V~V3LbWeWfW!K#K4L5L6L7L8LyWzWAWBWCWDWFWGWHWIWJWMWqL9L!LDcWWXWYWZW0W1W2W3W4W5W6W7W8W9W!W#W$W%W'W(W)W*W+W,W-W.W/Wke:W
209 return options 2HM[M{M$Lj e gNhNiN*b+b(bjN,b-b.b/bkNlN:b%L'L(Lf g h i X Y Z 0 ;b=bTK+LtKuK{c|cvK,LkL-L.LwK/L}cxKyKm n o ~czKAKBKCKDKEKFKGKHKIKJKKKlLmL[bp q r @Nhf[Nif_N_dkf`Nmf}N~NaOcOeOgOiOkOAO@O[O[cecfc*P+P.P/P:P;PHL?PgeILJL`P{PKLLLMLNLVK|POL}PPLpQQLqQRLrQSLsQTLtQULuQVLvQWLwQXLYLSQTQUQ^cgchc8R$R,R/R_R-f`R{RqMrM|R}R~RaSbSsM.f%ecSWKtMdSeSfSiSnSuMvMqTzT|fATBTwMxMCTDTETFTGTyM}f:eHT3KzMITJTKTNTSTAMBMZU9U)U:U^UaVhVpV!K#KyWzWAWBWCWDWFWGWHWIWJWMW9L!LWWXWYWZW0W1W2W3W4W5W6W7W8W9W!W#W$W%W'W(W)W*W+W,W-W.W/Wke:W
210 return cls() 2IMJMKMLM{eMMNMOMPMzfQMRMSMTMUMVMt AfBfu _cv CfWMXMDfEf6dFfYMGfHfZM0MIf7d1MJfKfLf/d2M8dw x y z A B C D E F G H I J K L M N O P Q R S T U V 3M4M5M6M7M8M9M!M#MMf$M%M'MNfOfPfQfRfLKMKNKOKPKQKRKSK(M)M*M+M,M-M.M/M:M;M=M?M@M]M`c:d^M_M`MictLcNdNeNaL$Lj e SfvbTf*b+b(b,b-b.b/b:bmNnN9d!d#d$d%dW mg%L'L(LoNpNqNf g h i X Y Z 0 wbxbybrNsNtNuNvNwNxN'dyNzNANBNCN6b7b8b|e}e~ejckcDNENFNGNHNINJNKNLNMN9b!b#bfLgLhL5o7oNNngONPNQNRN$b%b'bcfdfeflcmcSN(d;b=bIbTNUNVNWN1 )d*dXN0f1f2f3fYb4f2 ?b+LtK=duK{cYN|cZNvK,L0N1N-L2N.LwK@b/L}cxK?dyK3N4N5N~c@dzK[dAK]dBK^dCKDKEKFKGKHKIKJKKK6N7N8N9N!N#N$N%N'N(N)N*NnL+NoL,N-NpL.N/N:N;N=N?Ngf]N^N_djflf{N|NnfofbOdOfOhOjO`dk l {J|JlKmK}J~JnKoKzLUKAL.O/O:O;O=O?O]O^O|d_OBL?cCL{O}O~OaPbPcPdP@cePfPgPhPDLELFL5fiPjPkPlPmPnPoPpPqPrPsPtPuPvP[cecfczP}dAPcd3 ]c~daebece$P%P'P(P)P]bZbJbKbLb0bMbNb^btcucvc4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb_b1bObPbQb2bRbSb`bwcxcyc/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb{b3bTbUbVb4bWbXb|bzcAcBcdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHbde,P-PGLeefe[P]P^P_PVKheiejeZLCc1Q2Q3Q7Q8Qrf9Q!Q#Q$Q%Q^c'Q5b(Q)Q*Q+Q,Q-Q.Q/Q:Q;Qsf=Q?Q@Q[Qgdhdidgchc`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R=c9R!R#R%R'R(R)R*R+R-R.R:R;R=R?R@R[R]R^RqMrMsMtM/f:fgShSjSkSlSmSoSpSqSrSsStSuSvSwSuM;fxSySzSASBSCSDSESFSGSHS=f'eISXKJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S?f3S4S5S6S7S8S9S!S#S@f$SYK%S'S(S[f]f)e*e+e-e)S*SZK0K+S^f,S-S.S/S:S;S=S?S@S[S_f]S1K^S_S`S{S|S}SvM`f~SaTbTcTdTeTfTgThTiTjTkT{f/elT2KmTnToTpTrTsTtTuTvTwTxTyTwMxMyMzM~fagLTMTOTPTQTRTTTUTVTWTXTYTZT0T1TAMbg2T3T4T5T6T7T8T9T!T#T$Tcg;e%T4K'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{Tdg|T}T~TaUbUcUdUeUfUeggU5KhUiUjUfggg?e@e[e^ekUlU6K7KmUhgnUoUpUqUrUsUtUuUvUwUigxU8KyUzUAUBUCUDUBMjgEUFUGUHUIUJUKULUMUNUOUPUkg`eQU9KRUSUTUUU0L1LXUYU0U1U2U3U4U5U6U7U8U!U#U$U%U'U(U*U+U,U-U.U/U;U=U?U@U[U]U_U`U{U|U}U~UbVcVdVeVfVgViVjVkVlVmVnVoVqVrVsVtVuVvVwVzVkdd JdAV)bBVvgSVTVUVVVWVXVYVZV2LSdTdb +V,V/V:V;V=V]V^V_V`V~V3LbWeWfW!K#K4L5L6L7L8LqLDcke
211 elif isinstance(options, cls): 2zft AfBfu v CfDfEf6dFfGfHfIf7dJfKfLf8dw x y z A B C D E F G H I J K L M N O P Q R S T U V MfNfOfPfQfRfMhNhOhneQhoeShpeThqeUhreVhseWhXhYhZh0h1h|M}M~MictLaNbNj e fN2hSfvbTf3h9d!d#d$d%dW f g h i X Y Z 0 wbxbyb'd6b7b8bUfVfWfXfYfZf4h5h6h7h9b!b#b8h$b%b'b(d9hIb1 )d*d0f1f2f3fYb4f2 )LTK*LlOmOuLnOvLoOpOqOrOsOwLtOxLuOyLvOwO{dxOyOzOk BOl CO{J|JlKmK}J~JnKoKzLUKALDOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'Oadbd(O)O*O+O,O-OncocpcqcrcscpKBL?cCL`O|O@cDLELFL5f:L;L=L[c?LecwPfcxP@LyP[L]L^L_L`L{Lcd|L}L~LaMbMcMdMeMfMgMhMiMjMkMBPCPDPEPFPGPlMaKmMnM3 6g6f7f]cuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,fHPEcc FcIPGcJPHcKPIcLPJcMPKcNPLcOPMcPPNcQPOcRPPcSPQcoMRcpMScTPTcUPUcVPVcWPWcXPXcYPYcZPZc0P0c1P1c2P2c3P3c4P4c5P5clg6c6P7c7P8c8P9c9P!P#P!cGL=PqfHL@PILJLKLLLMLNLVKOL~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQPLQLRLSLTLULVLWLxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQXLOQPQYLQQRQheugZLVQWQXQYQZQ0QCc}b~bs acbc4Q5Q6Q#c^cddedfd]Q^Q_Qgchc4gleme=c5d'h(h*h+h-h.h-f.f/f:f/h:h;h=h?h@h[h]h^h`h{h}h~h;f=faibici?f@fdi[f]feifigihiii(ejiki+d,dxi.e^f_fyizi`f{fAiBiDiEi|f}f~fagFiGiHiIiJiKiLiMiNiPiQiSiTibgcgUiViWidgegXifgggYiZi0i1i2i=e3i4i-d.d*i_ehgig+i,ijgkgVUWU0L1L-i.i:i;i?i@i]i^i`i{i}i~ibjcjejfjxVyVjdCMldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cKdLdMdNdOdPdQdCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVDMEMRdFM2L0V1V2V3V4V5V6V7V8V9V!V#Vb UdVdWdXdYdZd0d1d$V%V'V(V2d)V3d4d*V-V.V?V@V[V{VGM|V}VaW3LcWdWgWhWiWjWkWlWmWnWoWpWqWrWsW!KtW#K4L5L6L7LuWvWwWxW8LEWKWLWNWOWPWQW9LRW!LSWTWbKUWDcVW
212 return options 2zft AfBfu v CfDfEf6dFfGfHfIf7dJfKfLf8dw x y z A B C D E F G H I J K L M N O P Q R S T U V MfNfOfPfQfRfMhNhOhneQhoeShpeThqeUhreVhseWhXhYhZh0h1h|M}M~MictLaNbNj e fN2hSfvbTf3h9d!d#d$d%dW f g h i X Y Z 0 wbxbyb'd6b7b8bUfVfWfXfYfZf4h5h6h7h9b!b#b8h$b%b'b(d9hIb1 )d*d0f1f2f3fYb4f2 lOmOuLnOvLoOpOqOrOsOwLtOxLuOyLvOwO{dxOyOzOk BOl COlKmKnKoKzLALDOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'Oadbd(O)O*O+O,O-OncocpcqcrcscBL?cCL`O|O@cDLELFL5f:L;L=L[c?LecwPfcxP@LyP[L]L^L_L`L{Lcd|L}L~LaMbMcMdMeMfMgMhMiMjMkMBPCPDPEPFPGPlMaKmMnM3 6g6f7f]cuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e8f9f!f#f$f%f'f(f)f*f+f,fHPEcc FcIPGcJPHcKPIcLPJcMPKcNPLcOPMcPPNcQPOcRPPcSPQcoMRcpMScTPTcUPUcVPVcWPWcXPXcYPYcZPZc0P0c1P1c2P2c3P3c4P4c5P5clg6c6P7c7P8c8P9c9P!P#P!cGL=PqfHL@PILJLKLLLMLNLVKOL~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQPLQLRLSLTLULVLWLxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQXLOQPQYLQQRQheugZLVQWQXQYQZQ0QCc}b~bs acbc4Q5Q6Q#c^cddedfd]Q^Q_Qgchc4gleme=c5d'h(h*h+h-h.h-f.f/f:f/h:h;h=h?h@h[h]h^h`h{h}h~h;f=faibici?f@fdi[f]feifigihiii(ejiki+d,dxi.e^f_fyizi`f{fAiBiDiEi|f}f~fagFiGiHiIiJiKiLiMiNiPiQiSiTibgcgUiViWidgegXifgggYiZi0i1i2i=e3i4i-d.d*i_ehgig+i,ijgkgVUWU0L1L-i.i:i;i?i@i]i^i`i{i}i~ibjcjejfjxVyVjdCMldmdndodpd$c%c'cqdrdsdtdccdc(cud)cvdwdxdyd*czd+c,c-c.cAdBdCdDdEdFdGdHdId/c:c;cKdLdMdNdOdPdQdCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVDMEMRdFM2L0V1V2V3V4V5V6V7V8V9V!V#Vb UdVdWdXdYdZd0d1d$V%V'V(V2d)V3d4d*V-V.V?V@V[V{V|V}VaW3LcWdWgWhWiWjWkWlWmWnWoWpWqWrWsW!KtW#K4L5L6L7LuWvWwWxW8LEWKWLWNWOWPWQW9LRW!LSWTWbKUWDcVW
213 elif isinstance(options, dict): 2)LTK*L{J|J}J~JUKpKaKGMbK
214 return cls(**options) 2)LTK*L{J|J}J~JUKGM
215 else:
216 raise TypeError( 2pKaKbK
217 f"The {options_description} must be provided as an object " 2pKaKbK
218 f"of type {cls.__name__} or as a dict with valid {options_description}. " 2pKaKbK
219 f"The provided object is '{options}'." 2pKaKbK
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" 2Ecc FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#cgchc$c%c'c)c-c.c/c:c;c}X
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: 2qK
244 """
245 A decorator that actually wraps the function for checking preconditions.
246 """
248 @functools.wraps(wrapped_function) 2qK
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) 2qK
254 result = wrapped_function(*args, **kwargs) 2qK
256 return result 2qK
258 return inner 2qK
260 return outer 2qK
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) 2k l ?c@c:L;L=L?Lecfc@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnM3 6guevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$eoMpMCMccdc(c*c+c,c~XaYbYcYdYeYDMEMfYgYhYWXXXYXFMtfufvfwfxfyfiYjY
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) 2ccdcWXXXYX
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() 2}b~bs acbc
298 self._entered = False 2}b~bs acbc
300 def __enter__(self):
301 self._stack.__enter__() 2}b~bs acbc
302 self._entered = True 2}b~bs acbc
303 return self 2}b~bs acbc
305 def __exit__(self, exc_type, exc, tb):
306 # If exit callbacks remain, they'll run in LIFO order.
307 self._entered = False 2}b~bs acbc
308 return self._stack.__exit__(exc_type, exc, tb) 2}b~bs acbc
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: 2}b~bs acbc
316 raise RuntimeError("Transaction must be entered before append()")
317 self._stack.callback(partial(fn, *args, **kwargs)) 2}b~bs acbc
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() 2}b~bs acbc
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 24gleme=c5g5d
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:K#LW ZbJbKbLb0bMbNb4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb1bObPbQb2bRbSb/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb3bTbUbVb4bWbXbdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHb
345 val = (<uint8_t*>ptr)[0] 2Jb5 6 7 ' ( Ob: ; = ` { Tbebfbgbnbob
346 elif width == 2:
347 val = (<uint16_t*>ptr)[0] 2$K'K)K+K-K/KKbLb8 9 ! ) * + PbQb? @ [ | } ~ UbVbhbibjbpbqbrb
348 elif width == 4:
349 val = (<uint32_t*>ptr)[0] 2%K(K*K,K.K:KW MbNb4 # $ % , - . RbSb/ ] ^ _ abbbcbWbXbdbkblbmbsbtbub
350 else:
351 raise ValueError(f"value must be 1, 2, or 4 bytes, got {width}") 2#LZb0bzbAbBb1b2bCbDbEb3b4bFbGbHb
352 return (val, <unsigned int>width) 2$K%K'K(K)K*K+K,K-K.K/K:KW JbKbLbMbNb4 5 6 7 8 9 ! # $ % ' ( ) * + , - . ObPbQbRbSb/ : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbTbUbVbWbXbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbub
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): 2LKMKNKOKPKQKRKSK;W=W$K%K?W@W'K(K[W]W)K*K^W_W+K,K`W{W-K.K|W}W/K:K#Lj e *b+b(b,b-b.b/b:bW bLf g h i jckcafbfcLdLeL5o7olcmc;b=bffiL?b;djL@bm n o [bp q r pf]bZbJbKbLb0bMbNb^btcucvc4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb_b1bObPbQb2bRbSb`bwcxcyc/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb{b3bTbUbVb4bWbXb|bzcAcBcdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHb~WaXbXWKcXdXeXfXXKgXhXYK(e,e.eZK0KiXjXkXlXmXnX1KoX2KpXqX3KrXsXtXuX4KvXwX5K=e]e_e6K7KxXyXzXAXBXCX8KDX9KEXFXGXHXIXJXKXLX
382 byte_val = value 2LKMKNKOKPKQKRKSK;W=W?W@W[W]W^W_W`W{W|W}Wj e *b+b(b,b-b.b/b:bbLf g h i jckcafbfcLdLeL5o7olcmc;b=bffiL?b;djL@bm n o [bp q r pf^btcucvc`bwcxcyc|bzcAcBc~WaXbXWKcXdXeXfXXKgXhXYK(e,e.eZK0KiXjXkXlXmXnX1KoX2KpXqX3KrXsXtXuX4KvXwX5K=e]e_e6K7KxXyXzXAXBXCX8KDX9KEXFXGXHXIXJXKXLX
383 return (<unsigned int>byte_val, <unsigned int>1) 2LKMKNKOKPKQKRKSK;W=W?W@W[W]W^W_W`W{W|W}Wj e *b+b(b,b-b.b/b:bbLf g h i jckcafbfcLdLeL5o7olcmc;b=bffiL?b;djL@bm n o [bp q r pf^b`b|b~WaXbXWKcXdXeXfXXKgXhXYK(e,e.eZK0KiXjXkXlXmXnX1KoX2KpXqX3KrXsXtXuX4KvXwX5K=e]e_e6K7KxXyXzXAXBXCX8KDX9KEXFXGXHXIXJXKXLX
385 if isinstance(value, bytes): 2$K%K'K(K)K*K+K,K-K.K/K:K#LW ]bZbJbKbLb0bMbNb4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb_b1bObPbQb2bRbSb/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb{b3bTbUbVb4bWbXbdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHb
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:K#LZbJbKbLb0bMbNb1bObPbQb2bRbSb3bTbUbVb4bWbXb
388 if PyObject_GetBuffer(value, &buf, PyBUF_SIMPLE) != 0: 2W ]b4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb_b/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEb{bdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHb
389 raise TypeError(
390 f"value must be an int or support the buffer protocol, "
391 f"got {type(value).__name__}"
392 )
393 try: 2W 4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEbdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHb
394 return _read_fill_ptr(<const char*>buf.buf, buf.len) 2W 4 zb5 6 7 8 9 ! # $ % Ab' ( ) * + , - . Bb/ Cb: ; = ? @ [ ] ^ _ Db` { | } ~ abbbcbEbdbFbebfbgbhbibjbkblbmbGbnbobpbqbrbsbtbubHb
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: 2ZX0XuLvL1X2X3X4XwLxLyLk l {J|JlKmK}J~JnKoK5X6X7X8X9X!X#X$X%X'X(X)X*X+X,X-X.X/X:X;X=X?X@X[X]X^Xogpgqgrgadbdsgtg_X`X{X|Xncocpcqcrcsc4gleme=c5g5d
403 return 2ZX0XuLvL1X2X3X4XwLxLyLk l {J|JlKmK}J~JnKoK5X6X7X8X9X!X#X$X%X'X(X)X*X+X,X-X.X/X:X;X=X?X@X[X]X^Xogpgqgrgadbdsgtg_X`X{X|Xncocpcqcrcsc5d
404 _fork_warning_checked = True 24gleme=c5g5d
406 # Common warning message parts
407 common_message = (
408 "CUDA does not support. Forked subprocesses exhibit undefined behavior, " 24gleme=c5g5d
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: 24gleme=c5g5d
415 start_method = multiprocessing.get_start_method() 24gleme=c5g5d
416 if start_method == "fork": 24gleme=c5d
417 message = f"multiprocessing start method is 'fork', which {common_message}" 2leme=c5d
418 warnings.warn(message, UserWarning, stacklevel=3) 2leme=c5d
419 except RuntimeError: 25g
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": 25g
423 message = (
424 f"multiprocessing start method is not set and defaults to 'fork' on Linux, " 25g
425 f"which {common_message}"
426 )
427 warnings.warn(message, UserWarning, stacklevel=3) 25g