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

1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

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 

13  

14from cuda.bindings import driver as driver, nvrtc as nvrtc, runtime as runtime 

15  

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' 

23  

24from cuda.bindings.nvvm import nvvmError 

25from cuda.bindings.nvjitlink import nvJitLinkError 

26  

27from cpython.buffer cimport PyObject_GetBuffer, PyBuffer_Release, Py_buffer, PyBUF_SIMPLE 

28  

29from cuda.bindings cimport cynvrtc, cynvvm, cynvjitlink 

30  

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 

33  

34  

35class CUDAError(Exception): 

36 pass 

37  

38  

39class NVRTCError(CUDAError): 

40 pass 

41  

42  

43  

44class ComputeCapability(NamedTuple): 

45 """A named tuple of (major, minor) CUDA compute capability version numbers.""" 

46 major: int 

47 minor: int 

48  

49  

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

66  

67  

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 

74  

75  

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

92  

93  

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

109  

110  

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

128  

129  

130cdef object _RUNTIME_SUCCESS = runtime.cudaError_t.cudaSuccess 

131cdef object _NVRTC_SUCCESS = nvrtc.nvrtcResult.NVRTC_SUCCESS 

132  

133  

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()}") 

151  

152  

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

167  

168  

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

179  

180  

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}") 

190  

191  

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

201  

202  

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 ) 

221  

222  

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

228  

229  

230def precondition(checker: Callable[..., None], str what="") -> Callable[..., Any]: 

231 """ 

232 A decorator that adds checks to ensure any preconditions are met. 

233  

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. 

238  

239 Returns: 

240 Callable: A decorator that creates the wrapping. 

241 """ 

242  

243 def outer(wrapped_function: Callable) -> Callable: 2qK

244 """ 

245 A decorator that actually wraps the function for checking preconditions. 

246 """ 

247  

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

255  

256 return result 2qK

257  

258 return inner 2qK

259  

260 return outer 2qK

261  

262  

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

268  

269  

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

275  

276  

277  

278class Transaction: 

279 """ 

280 A context manager for transactional operations with undo capability. 

281  

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. 

285  

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 

291  

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

299  

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

304  

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

309  

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

318  

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

325  

326  

327# Track whether we've already warned about fork method 

328_fork_warning_checked = False 

329  

330  

331def reset_fork_warning() -> None: 

332 """Reset the fork warning check flag for testing purposes. 

333  

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

339  

340  

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

353  

354  

355cpdef tuple _parse_fill_value(value): 

356 """Parse a fill/memset value into (raw_value, element_size). 

357  

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. 

363  

364 Returns 

365 ------- 

366 tuple of (int, int) 

367 (raw_value, element_size) where element_size is 1, 2, or 4. 

368  

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 

380  

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

384  

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

387  

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) 

397  

398  

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

405  

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 ) 

413  

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