Coverage for cuda/core/_utils/cuda_utils.pyx: 94.86%

214 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-03 02:41 +0000

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 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh'J(JZJ_KBh

52 if isinstance(cfg, int): 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh'J(JZJ_KBh

53 cfg = (cfg,) 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h_h{h|h}h~haibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Kcf[KdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg]K^KbdlcmcpiqisitiviwiVeWePgQgxiyiziAiBiCiDiEiFiHiIiKiLiRgSgMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXeYe9iQfXgYg!i#iZg0g$i%i(i)iZe0e1g2g*i+i,i-i.i/i:i;i=i@i[i^i_i3g4g`i{i|i5g6g}i7g8g~iajbjcjdjTfejfj1e2esjZf9g!gtjuj#g$gvjwjyjzjBjCjEjFjHjIjKjLjNjOjQjRjAh'J

54 else: 

55 common = "must be an int, or a tuple with up to 3 ints" 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAh(JZJ_KBh

56 if not isinstance(cfg, tuple): 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAh(JZJ_KBh

57 raise ValueError(f"{label} {common} (got {type(cfg)})") 2_K

58 if len(cfg) > 3: 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAh(JZJBh

59 raise ValueError(f"{label} {common} (got tuple with length {len(cfg)})") 2(J

60 if any(not isinstance(val, int) for val in cfg): 2^h{e`h|e}e~eafbf#b$b%b'b(b)b*b+b,bzhlicfmiadnioiriuicdGiJiJfXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8iRf'idd?i]iSfgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrj0fxjAjDjGjJjMjPjSjAhZJBh

61 raise ValueError(f"{label} {common} (got {cfg})") 2ZJ

62 if any(val < 1 for val in cfg): 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh'JBh

63 plural_s = "" if len(cfg) == 1 else "s" 2cf'JBh

64 raise ValueError(f"{label} value{plural_s} must be >= 1 (got {cfg_orig})") 2cf'JBh

65 return cfg + (1,) * (3 - len(cfg)) 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h^h{e_h`h|e{h}e|h~e}haf~hbfaibicidieifi5 0 gipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwb( ) |c}cCg~cjckcxbyhzh=K?K@Klicf[KmiaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOgni]Koi^KbdlcmcpiqirisitiuiviwiVeWecdPgQgxiyiziAiBiCiDiEiFiGiHiIiJiKiLiRgSgJfMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXiXeYiZiLfMf0i1i2i3i4iNfYe5iOfPf6i7i8i9iQfXgYg!i#iZg0gRf$i%i'i(i)iZe0edd1g2g*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i3g4gSf`i{i|i5g6g}i7g8g~iajbjcjdjTfejfjgj1ehjijUfVfjjkjljmjnjWf2eojXfYfpjqjrjsjZf9g!gtjuj#g$g0fvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjAh

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: 2)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK

72 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK

73 return <int>dev 2)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK

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 (g

115 if handle != NULL: 2a c (g

116 cynvjitlink.nvJitLinkGetErrorLogSize(handle, &logsize) 1c

117 cdef bytes log_bytes 

118 cdef str log_str = "" 2c (g

119 if logsize > 1 and handle != NULL: 2c (g

120 log_bytes = b" " * logsize 1c

121 if cynvjitlink.nvJitLinkGetErrorLog(handle, <char*>log_bytes) == \ 1c

122 cynvjitlink.nvJitLinkResult.NVJITLINK_SUCCESS: 1c

123 log_str = log_bytes.decode("utf-8", errors="backslashreplace") 1c

124 cdef object exc = nvJitLinkError(err) 2c (g

125 if log_str: 2c (g

126 exc.args = (exc.args[0] + f"\nnvJitLink error log: {log_str}", *exc.args[1:]) 1c

127 raise exc 2c (g

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 YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*jJe+j,j-j.j/j:j;j=j?jKe@j[j]j^j_jLe`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBk0JCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m1J!m#m$m%m'm(m)m*m2J+m,m-m.m/m:m3J;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n4J,n-nMe.nNe/nOe:nPe;nQe=n?n@n[n]nqb^n_n`n`K{n|n)g}n5J~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoReAoBoCoDoEoFo#bGo$bHo%bIo4fJo5fKo6fLoocMopcNoOoPoQoRoSorgTosgUotgVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8oug9ovg!owg#oJW$oKW%oLW'o{K(o|K)o*o+oMW,o}K-o.o/o:o;o=o'b?o(b@o)b[o~K]oaL^obL_o`o{o|o}o~oap*gbpcpdpepfp*bgp+bhp,bip9fjp!fkp#flpqcmprcnpopSeppqp_brp`bspChtpcLupUbvpwpxpypzpvbApTeBpUeCpDpEpFpGpHp1bIpJpwbKpLpMpNp{biKOp4ejKPp5ekKQpgdRphdSpNWlKTpdLmKUpeLVpnKWpoKXppKYp|bqKZp2b0prK1p6esK2p* 3p+ 4p, 5p3b6p7etK7p8euK8p9evK9p!ewK!pxK#pyK$pzK%pAK'pBK(pCK)pDK*pEK+pfL,pgL-pOW.pPW/pQW:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_phL`pGh{piL|pHh}pIh~pjLaqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q5q6q7q8q9q!q#q$q6J3h%q'qyc(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q|c}q~qarbrcrdrerfr}cgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQr~cRrjcSrkcTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!hkLlL#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,h-eKu.e-hLu/eMuNu;gOuPuQuRuSuTuUuIcVumLWunLXuccdc: ecYufcZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-ubd.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvlckvmclvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]vRWoL^v_v`v{v|vpL}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwqLvwwwxwywzwrLAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8wsL9wVe!wtL#wuL$wFK%wGK'wvL(wwL)wxL*wyL+wzL,wHK-wWe.wcd/wAL:w;w=wIK?wBL@wCL[wDL]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxELqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxFLLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.xJK/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7zKK8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_zGL`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAHLEAZeFAILGAJLHALKIAMKJAKLKALLLAMLMANLNAOLOANKPA0eQAddRAPLSATAUAOKVAQLWARLXASLYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.ATL/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBULgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBPKRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDQKDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8DVL9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEWLbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEXLzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEYLXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-EZL.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhF0LiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFF1LGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F2L5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPG=gQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H1f@H[H2f]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlI3LmI4LnI5LoI6LpI7LqI8LrIsI9LtI!LuI#LvI$LwI%LxIyIzI'LAIBICIDIEI%gFIGI'gHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJSWTW(L)L*L+LUW,L-L.L/LVW:LWW;L=LXW?LYW@LZW[L]L0W^L1W_L2W`L3W4W{L5W|L6W7W8W9W}LeJfJgJhJiJ~LjJkJlJ!WmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

136 return 0 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*jJe+j,j-j.j/j:j;j=j?jKe@j[j]j^j_jLe`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-nMe.nNe/nOe:nPe;nQe=n?n@n[n]nqb^n_n`n`K{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoReAoBoCoDoEoFo#bGo$bHo%bIo4fJo5fKo6fLoocMopcNoOoPoQoRoSorgTosgUotgVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8oug9ovg!owg#oJW$oKW%oLW'o{K(o|K)o*o+oMW,o}K-o.o/o:o;o=o'b?o(b@o)b[o~K]oaL^obL_o`o{o|o}o~oapbpcpdpepfp*bgp+bhp,bip9fjp!fkp#flpqcmprcnpopSeppqp_brp`bspChtpcLupUbvpwpxpypzpvbApTeBpUeCpDpEpFpGpHpIpJpwbKpLpMpNp{biKOp4ejKPp5ekKQpgdRphdSpNWlKTpdLmKUpeLVpnKWpoKXppKYp|bqKZp2b0prK1p6esK2p* 3p+ 4p, 5p3b6p7etK7p8euK8p9evK9p!ewK!pxK#pyK$pzK%pAK'pBK(pCK)pDK*pEK+pfL,pgL-pOW.pPW/pQW:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_phL`pGh{piL|pHh}pIh~pjLaqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q5q6q7q8q9q!q#q$q3h%q'qyc(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q|c}q~qarbrcrdrerfr}cgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQr~cRrjcSrkcTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!hkLlL#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,hKu.e-hLu/eMuNuOuPuQuRuSuTuUuIcVumLWunLXuccdc: ecYufcZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-ubd.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvlckvmclvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]vRWoL^v_v`v{v|vpL}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwqLvwwwxwywzwrLAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8wsL9wVe!wtL#wuL$wFK%wGK'wvL(wwL)wxL*wyL+wzL,wHK-wWe.wcd/wAL:w;w=wIK?wBL@wCL[wDL]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxELqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxFLLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.xJK/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7zKK8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_zGL`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAHLEAZeFAILGAJLHALKIAMKJAKLKALLLAMLMANLNAOLOANKPA0eQAddRAPLSATAUAOKVAQLWARLXASLYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.ATL/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBULgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBPKRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDQKDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8DVL9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEWLbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEXLzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEYLXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-EZL.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhF0LiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFF1LGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F2L5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H1f@H[H2f]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlI3LmI4LnI5LoI6LpI7LqI8LrIsI9LtI!LuI#LvI$LwI%LxIyIzI'LAIBICIDIEI%gFIGI'gHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJSWTW(L)L*L+LUW,L-L.L/LVW:LWW;L=LXW?LYW@LZW[L]L0W^L1W_L2W`L3W4W{L5W|L6W7W8W9W}LeJfJgJhJiJ~LjJkJlJ!WmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

137 cdef const char* name 

138 name_err = cydriver.cuGetErrorName(error, &name) 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g

139 if name_err != cydriver.CUresult.CUDA_SUCCESS: 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g

140 raise CUDAError(f"UNEXPECTED ERROR CODE: {error}") 23h

141 with gil: 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g

142 # TODO: consider lower this to Cython 

143 expl = DRIVER_CU_RESULT_EXPLANATIONS.get(int(error)) 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g

144 if expl is not None: 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g

145 raise CUDAError(f"{name.decode()}: {expl}") 20J1J2J3J4J)g5J*gUb1b* + , - . / 6J3h-e;g: !b=g

146 cdef const char* desc 

147 desc_err = cydriver.cuGetErrorString(error, &desc) 

148 if desc_err != cydriver.CUresult.CUDA_SUCCESS: 

149 raise CUDAError(f"{name.decode()}") 

150 raise CUDAError(f"{name.decode()}: {desc.decode()}") 

151  

152  

153cpdef inline int _check_runtime_error(error) except?-1: 

154 if error == _RUNTIME_SUCCESS: 22b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/haM?g:h:eyc;h=h?h.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e]e^e

155 return 0 22b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/h?g:h:eyc;h=h?h.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e]e^e

156 # `_check_error()` reaches this path only for `runtime.cudaError_t` values. 

157 # Use the enum name directly because Windows hybrid cudart can lag that table. 

158 name = error.name 2aM?g

159 expl = RUNTIME_CUDA_ERROR_EXPLANATIONS.get(int(error)) 2aM?g

160 if expl is not None: 2aM?g

161 raise CUDAError(f"{name}: {expl}") 2aM?g

162 desc_err, desc = runtime.cudaGetErrorString(error) 2?g

163 if desc_err != _RUNTIME_SUCCESS: 2?g

164 raise CUDAError(f"{name}") 

165 desc = desc.decode() 2?g

166 raise CUDAError(f"{name}: {desc}") 2?g

167  

168  

169cpdef inline int _check_nvrtc_error(error, handle=None) except?-1: 

170 if error == _NVRTC_SUCCESS: 2a TJbMMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe

171 return 0 2a bMMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe

172 err = f"{error}: {nvrtc.nvrtcGetErrorString(error)[1].decode()}" 2TJbM

173 if handle is not None: 2TJbM

174 _, logsize = nvrtc.nvrtcGetProgramLogSize(handle) 2TJ

175 log = b" " * logsize 2TJ

176 _ = nvrtc.nvrtcGetProgramLog(handle, log) 2TJ

177 err += f", compilation log:\n\n{log.decode('utf-8', errors='backslashreplace')}" 2TJ

178 raise NVRTCError(err) 2TJbM

179  

180  

181cdef inline int _check_error(error, handle=None) except?-1: 

182 if isinstance(error, driver.CUresult): 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

183 return _check_driver_error(error) 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbqcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,hKu.e-hLu/eMuNuOuPuQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

184 elif isinstance(error, runtime.cudaError_t): 2a 2b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/h:h:eyc;h=h?hMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e,c+d,d-d@g.d[g/d]g:d]e^e^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe

185 return _check_runtime_error(error) 22b3b$f%fidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d$d%d'd(d)d*d/h:h:eyc;h=h?h.b/b6 7 8 Ibe f g h i j k l m n o p q r s t 9 ! # Mbu v w x y z A B C D E F G H I J $ % ' QbK L M N O P Q R S T U V W X Y Z Jcgc;eKc=e?eLc@e[e]e^e

186 elif isinstance(error, nvrtc.nvrtcResult): 2a Mcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe

187 return _check_nvrtc_error(error, handle=handle) 2a Mcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe

188 else: 

189 raise RuntimeError(f"Unknown error type: {error}") 

190  

191  

192def handle_return(result: tuple[Any, ...], handle: object = None) -> Any: 

193 _check_error(result[0], handle=handle) 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

194 cdef int out_len = len(result) 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

195 if out_len == 1: 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOn5 Pn0 QnRnSnTnEbUnVnWnXnYn;bZn=b0n-b1n2n?b3n@b4n[b5n]b6n7n8n^b9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p$f]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbq%fcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h5q6q7q8q9q!q#q$q%q:h:e'qyc(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|rMc}rc Nc~rOcasPcbsQccsRcdsScesTcfsUcgsVchsWcisXcjsYcksZcls0cms1cns2cos3cps4cqs5crs6css7cts8cus9cvs!cws#cxs$cys%czs'cAs(cBs)cCs*cDsEs+cFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtJcXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%tgc't;e(tKc)t=e*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIu?eJu+h,hKu.e-hLu/eMuNuOuLcPu@e[eQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u,c$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uav+dbv,dcv-ddvevfvgv@g.dhv[g/div]g:djvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D]e2D^e3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D^g]D^D_D_g`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F;d]F=d^F?d_F@d`F[d{F]d|F^d}F-c~F.caG/cbG_dcG`ddG{deG|dfGhcgGichG:ciG}djG;ckG~dlGaemGbenGceoG=cpGdeqG?crG@csG[ctG]cuGeevGfewGgexGheyGiezGjeAGkeBGleCGmeDG^cEG_cFG`cGGHGd IGneJGoeKGpeLGqeMGreNGseOGtePGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4Gue5G6Gve7G8G9G!G#G$G%G'Gwe(G)G*G+Gb ,Gxe-G[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhih.Gjhkhlhmhnhohphqhrhsh/G:G;G=GthuhvhyezeAeBeCe.hDeEeFeGeHe?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

196 return 2; = ed? ,j@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbfd3enc5 0 Eb;b=b-b?b@b[b]b^b1 2 3 4 rbsbtbubFbGbHbChvbwb{b4e5egdhd|b2b6e* + , 3b7e8e9e!e}bDhEh- . $f/ FhGhHhIhJh%fKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh$eidjdkdldmdndodpdqdrdsdtdudvdwdxd0hydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d1h2h$d%d'd(d)d*dsctcucvcwcxc5q:eycxb4h5h6h%e.b'e/b7h8h9h!h#h$h%h'hJsKs~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(h(eJc)h*h)e*e+egc;eKc=e,e?e+h,h.e-h/eLc@e[eIc]e^e.h

197 elif out_len == 2: 

198 return result[1] 2a YjZj0j1j2j3j4j5j6j; 7j8j9j= !jed#j? $j%j'j(j)j*j+j-j.j/j:j;j=j?j@j[j]j^j_j`j{j@ |j[ }j] ~j^ ak_ bk` ck{ dk| ek} fk~ gkabhkbbikcbjkdbkkeblkfbmkgbnkhbokibpkjbqkkbrklbskmbtknbukobvkpbwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfnfdgn3ehninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnncKnLnMnNnOnPn0 QnRnSnTnEbUnVnWnXnYnZn0n-b1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofo1 go2 ho3 io4 jorbkosblotbmoubnoFbooGbpoHbqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIo4fJo5fKo6fLoocMopcNoOoPoQoRoSoToUoVoWoXoYoZo0o1o7f2o8f3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o{o}o~oapbpcpdpepfpgphpip9fjp!fkp#flpqcmprcnpopppqp_brp`bspChtpupvpwpxpypzpvbApBpCpDpEpFpGpHpIpJpwbKpLpMpNp{bOp4ePp5eQpgdRphdSpTpUpVpWpXpYp|bZp2b0p1p6e2p* 3p+ 4p, 5p3b6p7e7p8e8p9e9p!e!p#p$p%p'p(p)p*p+p,p-p.p/p:p}b;pDh=pEh?p- @p. [p]p/ ^pFh_p`pGh{p|pHh}pIh~paqJhbqcqKhdqLheqMhfqNhgqhq'fiqjqkqlqOhmqnqPhoqpqQhqqrqRhsqShtqThuq(fUhvq#ewq)f*fVh+fxq,fWhyqXhzqAqYhBqCqZh-fDq.fEqFqGqHqIqJq$eKqidjdkdldmdndodpdqdrdsdtdudvdLq( wd) xdMqNqOqPqQqRqSq0hTqUqVqydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d+g6d,g7dWqXqYq-g8d.g9d!d1h#d2h/g$d:g%d'd(d)d*dscZqtc0quc1qvc2qwc3qxc4q/h6q7q8q9q!q#q$q%q:h'q(q)q*q+q,q-q.q/q;h:q;q=q?q@q[q]q^q_q=h?h`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r/f[r]rxb^r4h5h_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIs6h%e.b'e/b7h8h9h!h#h$h%h'h~bLs4bMs6 NsVbOs7 Ps5bQsWbRs8 SsIbTszcUsAcVsBcWse XsJbYsf Zsg 0sh 1si 2sj 3sk 4sl 5sm 6sn 7sKb8so 9sp !sq #sr $syb%ss 'st (szb)sLb*sac+s6b,s9 -sXb.s! /s7b:sYb;s# =sMb?sCc@sDc[sEc]su ^sNb_sv `sw {sx |sy }sz ~sA atB btC ctD dtObetE ftF gtG htH itAbjtI ktJ ltBbmtPbntbcot8bpt$ qtZbrt% st9btt0but' vtQbwtFcxtGcytHcztK AtRbBtL CtM DtN EtO FtP GtQ HtR ItS JtT KtSbLtU MtV NtW OtX PtCbQtY RtZ StDbTtTbUt(h(eVtWtXtYt:fZt0t1t2t3t4t)h*h)e*e5t6t+e7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t,e:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJu+h,hKu.e-hLu/eMuNuOuPuQuRuSuTuUuIcVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u;f(u)u*u+u,u-u.u/u!b:u;u=u?u@u[u]u^u_u`u=f{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?x@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G.h?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQI?fRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJ@foJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJ

199 else: 

200 return result[1:] 2a ; = ed? @ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbfdvbwbMcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,c+d,d-d@g.d[g/d]g:d^g_g;d=d?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteueveweb xe[f]f^f_f`f{f`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthuhvhyezeAeBeCeDeEeFeGeHe

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: 2:M;M=M?M@M[M]M^M_M`M; |f}f= ed? ~f{M|MagbgJecg}Mdgeg~MaNfgKebNgghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbcNdNeNfNgNhNiNjNkNjglNmNnNkglgmgngogRKSKTKUKVKWKXKYK@h[h]hoNpN{e_hqNrN|e{hsNtN}e|huNvN~e}hwNxNaf~hyNzNbfaiANBNCNbicidieifd3eDNENFNfiGNHNINJNnccMKNLNKM5 0 MNgipgEbqgNNONPN;b=b-bQN?b@b[b]bRNSN^bhiTNUNMeNeOePeQeqb)gLMMMNMVNWNXN1 2 3 4 rbsbtbubFbGbHbYNZN0N1N2N3N4NRe5N6N7N8N9N#b$b%b4f5f6focpc!N#Nrgsgtg$N%Nugvgwg'Nii(N)N*N+N,N'b(b)b~KaLbL`o|oji-N*g.N/N:N;N*b+b,b9f!f#fqcrc=NSeki_b`bUb?N@N[N]NvbTeUe^NxgygzgAg1bBgwbOMZKPM{biKjK5ekKgd_Nhd`NlKmKeL{N|NnK}NoKpK|bqK2brK6esK* ~N+ aO, bO3b7etK8euK9evK!ewKxKyKzKAKBKCKDKEKfLcOgLdOeOfOgO}bhOiOjO- kO. lO/ mOnOhLoOiLpOqOjLrOsOtOuOvOwOxO'fyOzOAO(fBOCO#e)f*f+fDOEO,fFOGO-fHO.fIOJOKOLOMONOOOPOQOROSO$eTOUOdMVOeMWOXOYOZO0OfM1OgM2O3O4O5O6O7O( 8O) 9OUJVJ7J8JWJXJ9J!JhM0KiM!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkP!d#dlPmPnPoPpPqPsctcucvcwcxcrPsPtPuPvPwP#J:eycxPyPzPjM|ckMAPBPCPDPEPFPGPHPIP}cJPKPLPMPlMmMnMCgNPOPPPQPRPSPTPUPVPWPXPYPQMRMZP0PSM~cTMjc1Pkc2PUM3PVM4PWMXMYM5PZM0M1M2M3M4M5M6M7M8M9M!M#M$M6P7P8P9P!P#P%MYJ'M(MxbyhaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg$PMcc Nc%POc'PPc(PQc)PRc*PSc+PTc,PUc-PVc.PWc/PXc:PYc)MZc*M0c;P1c=P2c?P3c@P4c[P5c]P6c^P7c_P8c`P9c{P!c|P#c}P$c~P%c(g'caQ(cbQ)ccQ*cdQeQfQ+c%e.b'e/bgQhQiQjQkQkLlL~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(elQmQnQoQpQqQJcrQ:foMsQtQ)e*euQvQwQxQ+epMqMyQzQrMsMtMuMgc;eKc=eAQBQCQDQEQ,eFQGQHQIQJQKQLQMQNQOQvMPQwMQQxMRQyMSQzMTQAMUQBMVQCMWQXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%QDM'Q(QEM)Q?e-e.e/e*Q+Q,Q;gLc@e[e-Q.Q/Q:QIc;QmLnLccdc: ecfc=Q?Q@Q,c[Q]Q;f^Q_Q`Q{Q|Qbd}Q!b~QaRbRcRdReRfRgRhRiR=fjRkRlRmR+d,d-dnRoRpR.d/d:dlcmcqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[Rwh_e`e{cIeoL]R^R_RpLpi`R{R|R}Rqi~RaSqLbScSrLsidSeSfSgStihSiSvijSkSwisLVetLuLFKGKvLwLxLyLzLHKWecdAL;wIKBLCLDLPgQgxiyiziAiBiCilSmSDiELEinSoSpSFiqSFLHirSsStSuSIivSwSKixSySLizSJKRgASBSCSDSESFSGSHSISJSKSSgJfLS1KMSNSOSPSQSRSSSTSUSVSWSXSYSZS0SMi1S2SNi3S4SOi5STg6S7S8S9S!S#S$S%S'SUg(S2K)S*S+SPiVgWgQiRiSiTiUiKfViWiXeLfMfNfYePf9i,S-SQf3K4K.SXg/S:S;S=S?S@S[S]S^S_SYg`S5K{S|S}S!i~SaT#ibTKKZgcTdTeTfTgThTiTjTkTlTmTnT0gRfoT6KpTqTrTsTGL$itTuTvTwT%ixTyT(izTAT)iHLZeILJLLKMKKLLLMLNLOLNK0eddPLTAOKQLRLSL1g2g*i+i,i-i.i/iBTCT:iTL;iDTETFT=iGTUL@iHTITJTKT[iLTMT^iNTOT_iPTPK3gQTRTSTTTUTVTWTXTYTZT0T4gSf1T7K2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T`i*T+T{i,T-T|i.T5g/T:T;T=T?T@T[T]T^T6g_T8K`T{T|T}i7g8g~iajbjcjdjTfejfj1eUfVfWf2eYfsj}T~TZf9K!KaU9gbUcUdUeUfUgUhUiUjUkU!glU#KmUnUoUtjpUqUujrUQK#gsUtUuUvUwUxUyUzUAUBUCUDU$g0fEU$KFUGUHUIU]e^eFMGMJUKUVLvjLUMUNUOUwjPUQURUSUTUWLyjUUVUWUXUzjYUZUXLBj0U1U2U3UCj4U5UYLEj6U7U8U9UFj!U#UZLHj$U%U'U(UIj)U*U0LKj+U,U-U.ULj/U:U1LNj;U=U?U@UOj[U]U^U2LQj_U`U{U|URj}U~UaVbVcVdV;d=d+M?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`cd neoepeqereseteeV:bfV=ggVhViVjVkVlVmVnVoVpVqVrVsVtVuV,M-MvVwVxVyVuezVAVBVCV.MHMDVveEVFVGVHVIVJVKVLVweMVNVOVb xeyezeAeBeCeDeEePVQVRVSVFeTVGeHeUVVVWVXVYVZV0V1V2V3V4V5V6V7V8V9V!V/M#V$V%V'VIM(V)V*V+V,V-V)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj3L4L5L6L7L8L{J9L!L#L$L%L|J}J'L~JaKbKcK%gdK'geKfK3fgKhK?f(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~L@f

208 if keep_none: 2:M;M=M?M@M[M]M^M_M`M; |f}f= ed? ~f{M|MagbgJecg}Mdgeg~MaNfgKebNgghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbcNdNeNfNgNhNiNjNkNjglNmNnNkglgmgngogRKSKTKUKVKWKXKYKoNpNqNrNsNtNuNvNwNxNyNzNANBNCNfd3eDNENFNGNnccMKM5 0 pgEbqgNNONPN;b=b-bQN?b@b[b]bRNSN^bTNUNMeNeOePeQeqb)gLMMMNMVNWNXN1 2 3 4 rbsbtbubFbGbHbYNZN0N1N2N3N4NRe5N6N7N8N9N#b$b%b4f5f6focpc!N#N$N%N'N(N)N*N+N,N'b(b)b~KaLbL`o|o-N*g.N/N:N;N*b+b,b9f!f#fqcrc=NSe_b`bUb?N@N[N]NvbTeUe^NxgygzgAg1bBgwbZK{biKjK5ekKgd_Nhd`NlKmKeL{N|NnK}NoKpK|bqK2brK6esK* ~N+ aO, bO3b7etK8euK9evK!ewKxKyKzKAKBKCKDKEKfLcOgLdOeOfOgO}bhOiOjO- kO. lO/ mOnOhLoOiLpOqOjLrOsOtOuOvOwOxO'fyOzOAO(fBOCO#e)f*f+fDOEO,fFOGO-fHO.fIOJOKOLOMONOOOPOQOROSO$e7O( ) UJVJ7J8JWJXJ9J!JhM0KiMrPsPtPuPvPwP:eycxPyPzPjM|ckMBPDPEPFPGPHPIP}cJPKPLPMPlMmMnMCgNPOPPPQPRPSPTPUPVPWPXPYPZP0P~cjckc4P5Pxbad%e.b'e/bgQhQiQjQkQkLlL~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(elQmQnQoQpQqQJcoMsQ)e*euQvQwQxQ+epMqMyQzQrMsMtMuMgc;eKc=evMPQwMQQxMRQyMSQzMTQAMUQBMVQCMWQDMEM-e.e/e*Q+Q,QLcIc;QmLnL[Q]Q;f^Q_Q`Q{Q|Qbd}Q!b~QaRbRcRdReRfRgRhRiR=fjRkRlRmR.d/d:dlcmcqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R{coL]R^R_RpL`R{R|R}R~RaSqLbScSrLdSeSfSgShSiSjSkSsLVetLuLFKGKvLwLxLyLzLHKWecdAL;wIKBLCLDLPgQglSmSELnSoSpSqSFLrSsStSuSvSwSxSySzSJKRgASBSCSDSESFSGSHSISJSKSSgJfLS1KMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5STg6S7S8S9S!S#S$S%S'SUg(S2K)S*S+SVgWgLfMfNfPf,S-S3K4K.SXg/S:S;S=S?S@S[S]S^S_SYg`S5K{S|S}S~SaTbTKKZgcTdTeTfTgThTiTjTkTlTmTnT0gRfoT6KpTqTrTsTGLtTuTvTwTxTyTzTATHLZeILJLLKMKKLLLMLNLOLNK0eddPLTAOKQLRLSL1g2gBTCTTLDTETFTGTULHTITJTKTLTMTNTOTPTPK3gQTRTSTTTUTVTWTXTYTZT0T4gSf1T7K2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T5g/T:T;T=T?T@T[T]T^T6g_T8K`T{T|T7g8gUfVfWfYf}T~T9K!KaU9gbUcUdUeUfUgUhUiUjUkU!glU#KmUnUoUpUqUrUQK#gsUtUuUvUwUxUyUzUAUBUCUDU$g0fEU$KFUGUHUIUFMGMJUKUVLLUMUNUOUPUQURUSUTUWLUUVUWUXUYUZUXL0U1U2U3U4U5UYL6U7U8U9U!U#UZL$U%U'U(U)U*U0L+U,U-U.U/U:U1L;U=U?U@U[U]U^U2L_U`U{U|U}U~UaVdV=dd neeV:bfV=gvVwVxVyVzVAVBVCVHMveweb VVWVZV0V1V2V6V7V8V9V%VIM(V+V,V1f2fTjUjVjWjXj3L4L5L6L7L8L9L!L#L$L%L'L%g'g?f(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~L@f

209 return options 2:MBNGNKM5 0 NNONPN;b=b-bQN?b@b[b]bRNSN^bLMMMNM1 2 3 4 rbsbtbub_b`bZKiKjKkKgdhdlKmKeLnKoKpKqK2brKsK* + , 3btKuKvKwKxKyKzKAKBKCKDKEKfLgL}b- . / xOyOzO(fCO#e*fDO,fGOHOIOKOMOOOQOSO7O:eyc~cjckckLlLnQoQpQqQoMsQ+epMqMyQzQrMsMtMuMgc;eKc=evMPQwMQQxMRQyMSQzMTQAMUQBMVQCMWQDMEM*Q+Q,QbdlcmcoLpLqLrLsLVetLuLFKGKvLwLxLyLzLHKWecdAL;wIKBLCLDLELFLJKKKGLHLZeILJLLKMKKLLLMLNLOLNK0eddPLTAOKQLRLSLTLULPKQKVLWLXLYLZL0L1L2L1f2f3L4L5L6L7L8L9L!L#L$L%L'L%g'g?f(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~L

210 return cls() 2;M=M?M@M[M]M^M_M`M; |f}f= ed? ~f{M|MagbgJecg}Mdgeg~MaNfgKebNgghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbcNdNeNfNgNhNiNjNkNjglNmNnNkglgmgngogRKSKTKUKVKWKXKYKoNpNqNrNsNtNuNvNwNxNyNzNANCNfd3eDNENFNnccMKM5 0 pgEbqg;b=b-b?b@b[b]b^bTNUNMeNeOePeQeqb)gLMMMNMVNWNXN1 2 3 4 rbsbtbubFbGbHbYNZN0N1N2N3N4NRe5N6N7N8N9N#b$b%b4f5f6focpc!N#N$N%N'N(N)N*N+N,N'b(b)b~KaLbL`o|o-N*g.N/N:N;N*b+b,b9f!f#fqcrc=NSe_b`bUb?N@N[N]NvbTeUe^NxgygzgAg1bBgwb{biKjK5ekKgd_Nhd`NlKmK{N|NnK}NoKpK|bqK2brK6esK~NaObO3b7etK8euK9evK!ewKxKyKzKAKBKCKDKEKcOdOeOfOgOhOiOjOkOlOmOnOhLoOiLpOqOjLrOsOtOuOvOwO'fAOBO#e)f+fEOFO-f.fJOLONOPORO$e( ) UJVJ7J8JWJXJ9J!JhM0KiMrPsPtPuPvPwPxPyPzPjM|ckMBPDPEPFPGPHPIP}cJPKPLPMPlMmMnMCgNPOPPPQPRPSPTPUPVPWPXPYPZP0P~cjckc4P5Pxbad%e.b'e/bgQhQiQjQkQ~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb(elQmQJc)e*euQvQwQxQgc-e.e/eLcIc;QmLnL[Q]Q;f^Q_Q`Q{Q|Qbd}Q!b~QaRbRcRdReRfRgRhRiR=fjRkRlRmR.d/d:dlcmcqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R{c]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSFKGKHKIKPgQglSmSnSoSpSqSrSsStSuSvSwSxSySzSJKRgASBSCSDSESFSGSHSISJSKSSgJfLS1KMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5STg6S7S8S9S!S#S$S%S'SUg(S2K)S*S+SVgWgLfMfNfPf,S-S3K4K.SXg/S:S;S=S?S@S[S]S^S_SYg`S5K{S|S}S~SaTbTKKZgcTdTeTfTgThTiTjTkTlTmTnT0gRfoT6KpTqTrTsTtTuTvTwTxTyTzTATLKMKNKOK1g2gBTCTDTETFTGTHTITJTKTLTMTNTOTPTPK3gQTRTSTTTUTVTWTXTYTZT0T4gSf1T7K2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T5g/T:T;T=T?T@T[T]T^T6g_T8K`T{T|T7g8gUfVfWfYf}T~T9K!KaU9gbUcUdUeUfUgUhUiUjUkU!glU#KmUnUoUpUqUrUQK#gsUtUuUvUwUxUyUzUAUBUCUDU$g0fEU$KFUGUHUIUFMGMJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[U]U^U_U`U{U|U}U~UaVdV=dd neeV:bfV=gvVwVxVyVzVAVBVCVHMveweb VVWVZV0V1V2V6V7V8V9V%VIM(V+V,V1f2fTjUjVjWjXj@f

211 elif isinstance(options, cls): 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h{e_h|e{h}e|h~e}haf~hbfaibicidieifiHNINJNnccMKNLN5 0 MNgipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwbOMZKPMTOUOdMVOeMWOXOYOZO0OfM1OgM2O3O4O5O6O( 8O) 9OUJVJ7J8JWJXJ9J!JhM0KiM!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkP!d#dlPmPnPoPpPqPsctcucvcwcxc#JjM|ckMAPCP}clMmMnMCgQMRMSM~cTMjc1Pkc2PUM3PVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M6P7P8P9P!P#P%MYJ'M(MxbyhaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg$PMcc Nc%POc'PPc(PQc)PRc*PSc+PTc,PUc-PVc.PWc/PXc:PYc)MZc*M0c;P1c=P2c?P3c@P4c[P5c]P6c^P7c_P8c`P9c{P!c|P#c}P$c~P%c(g'caQ(cbQ)ccQ*cdQeQfQ+cJcrQ:foMtQpMqMrMsMtMuMgcKcAQBQCQDQEQ,eFQGQHQIQJQKQLQMQNQOQvMwMxMyMzMAMBMCMXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%QDM'Q(QEM)Q?e-e;gLc@e[e-Q.Q/Q:QIcccdc: ecfc=Q?Q@Q,cbd+d,d-dnRoRpRlcmcwh_e`e{cIepiqisitiviwiVeWePgQgxiyiziAiBiCiDiEiFiHiIiKiLiRgSgMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXeYe9iQfXgYg!i#iZg0g$i%i(i)iZe0e1g2g*i+i,i-i.i/i:i;i=i@i[i^i_i3g4g`i{i|i5g6g}i7g8g~iajbjcjdjTfejfj1e2esjZf9g!gtjuj#g$g]e^eFMGMvjwjyjzjBjCjEjFjHjIjKjLjNjOjQjRjbVcV;d+M?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`coepeqeresetegVhViVjVkVlVmVnVoVpVqVrVsVtVuV,M-Mue.MHMDVEVFVGVHVIVJVKVLVMVNVOVb xeyezeAeBeCeDeEePVQVRVSVFeTVGeHeUVXVYV3V4V5V!V/M#V$V'VIM)V*V-V)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK

212 return options 2; |f}f= ? ~fagbgJecgdgegfgKegghgigLe@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbjgkglgmgngog@h[h]h{e_h|e{h}e|h~e}haf~hbfaibicidieifiHNINJNnccMKNLN5 0 MNgipgEbqghiMeNeOePeQeqb1 2 3 4 rbsbtbubFbGbHbRe#b$b%brgsgtgugvgwgii'b(b)bji*b+b,bSekiUbvbTeUexgygzgAg1bBgwbTOUOdMVOeMWOXOYOZO0OfM1OgM2O3O4O5O6O( 8O) 9O7J8J9J!JhMiM!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkP!d#dlPmPnPoPpPqPsctcucvcwcxcjM|ckMAPCP}clMmMnMCgQMRMSM~cTMjc1Pkc2PUM3PVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M6P7P8P9P!P#P%MYJ'M(MxbyhaddfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfDgEgFgGgHgIgJgKgLgMgNgOg$PMcc Nc%POc'PPc(PQc)PRc*PSc+PTc,PUc-PVc.PWc/PXc:PYc)MZc*M0c;P1c=P2c?P3c@P4c[P5c]P6c^P7c_P8c`P9c{P!c|P#c}P$c~P%c(g'caQ(cbQ)ccQ*cdQeQfQ+cJcrQ:foMtQpMqMrMsMtMuMgcKcAQBQCQDQEQ,eFQGQHQIQJQKQLQMQNQOQvMwMxMyMzMAMBMCMXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%QDM'Q(QEM)Q?e-e;gLc@e[e-Q.Q/Q:QIcccdc: ecfc=Q?Q@Q,cbd+d,d-dnRoRpRlcmcwh_e`e{cIepiqisitiviwiVeWePgQgxiyiziAiBiCiDiEiFiHiIiKiLiRgSgMiNiOiTgUgPiVgWgQiRiSiTiUiKfViWiXeYe9iQfXgYg!i#iZg0g$i%i(i)iZe0e1g2g*i+i,i-i.i/i:i;i=i@i[i^i_i3g4g`i{i|i5g6g}i7g8g~iajbjcjdjTfejfj1e2esjZf9g!gtjuj#g$g]e^eFMGMvjwjyjzjBjCjEjFjHjIjKjLjNjOjQjRjbVcV;d+M?d@d[d]d^d-c.c/c_d`d{d|dhcic:c}d;c~daebece=cde?c@c[c]ceefegeheiejekeleme^c_c`coepeqeresetegVhViVjVkVlVmVnVoVpVqVrVsVtVuV,M-Mue.MHMDVEVFVGVHVIVJVKVLVMVNVOVb xeyezeAeBeCeDeEePVQVRVSVFeTVGeHeUVXVYV3V4V5V!V#V$V'VIM)V*V-V)J*J+J,J-J.J/J:J;J=J?J@J1f[J2fTjUjVjWj]J^J_J`JXj{J|J}J~JaKbKcK%gdK'geKfK3fgKhK

213 elif isinstance(options, dict): 2OMZKPMUJVJWJXJ0K#JYJ/M3f

214 return cls(**options) 2OMZKPMUJVJWJXJ0K/M

215 else: 

216 raise TypeError( 2#JYJ3f

217 f"The {options_description} must be provided as an object " 2#JYJ3f

218 f"of type {cls.__name__} or as a dict with valid {options_description}. " 2#JYJ3f

219 f"The provided object is '{options}'." 2#JYJ3f

220 ) 

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" 2Mcc NcOcPcQcRcScTcUcVcWcXcYcZc0c1c2c3c4c5c6c7c8c9c!c#c$c%c'c(c)c*c+c,clcmc-c.c/c;c[c]c^c_c`clX

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: 2$J

244 """ 

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

246 """ 

247  

248 @functools.wraps(wrapped_function) 2$J

249 def inner(*args, **kwargs) -> Any: 

250 """ 

251 Check preconditions and if they are met, call the wrapped function. 

252 """ 

253 checker(*args, **kwargs, what=what) 2$J

254 result = wrapped_function(*args, **kwargs) 2$J

255  

256 return result 2$J

257  

258 return inner 2$J

259  

260 return outer 2$J

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) 2( ) |c}cQMRMSMTMjckcUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(MxbyhdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIf)M*M+Mhcic:c=c?c@cmXnXoXpXqX,M-MrXsXtX#W$W.M[f]f^f_f`f{fuXvX

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) 2hcic#W$W

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() 2ccdc: ecfc

298 self._entered = False 2ccdc: ecfc

299  

300 def __enter__(self): 

301 self._stack.__enter__() 2ccdc: ecfc

302 self._entered = True 2ccdc: ecfc

303 return self 2ccdc: ecfc

304  

305 def __exit__(self, exc_type, exc, tb): 

306 # If exit callbacks remain, they'll run in LIFO order. 

307 self._entered = False 2ccdc: ecfc

308 return self._stack.__exit__(exc_type, exc, tb) 2ccdc: ecfc

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: 2ccdc: ecfc

316 raise RuntimeError("Transaction must be entered before append()") 

317 self._stack.callback(partial(fn, *args, **kwargs)) 2ccdc: ecfc

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() 2ccdc: ecfc

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 2wh_e`e{cxhIe

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;KJMqb4b6 Vb7 5bWb8 e Jbf g h i j k l m n Kbo p q r ybs t zbLb6b9 Xb! 7bYb# u Nbv w x y z A B C D ObE F G H AbI J BbPb8b$ Zb% 9b0b' K RbL M N O P Q R S T SbU V W X CbY Z DbTb

345 val = (<uint8_t*>ptr)[0] 16fghop9vwxEF$LMNUV

346 elif width == 2: 

347 val = (<uint16_t*>ptr)[0] 2%K(K*K,K.K:KVb7 i j k q r ybXb! y z A G H AbZb% O P Q W X Cb

348 elif width == 4: 

349 val = (<uint32_t*>ptr)[0] 2'K)K+K-K/K;KqbWb8 e l m n s t zbYb# u B C D I J Bb0b' K R S T Y Z Db

350 else: 

351 raise ValueError(f"value must be 1, 2, or 4 bytes, got {width}") 2JM4b5bJbKbLb6b7bNbObPb8b9bRbSbTb

352 return (val, <unsigned int>width) 2%K'K(K)K*K+K,K-K.K/K:K;Kqb6 Vb7 Wb8 e f g h i j k l m n o p q r ybs t zb9 Xb! Yb# u v w x y z A B C D E F G H AbI J Bb$ Zb% 0b' K L M N O P Q R S T U V W X CbY Z Db

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): 2RKSKTKUKVKWKXKYK.V/V%K'K:V;V(K)K=V?V*K+K@V[V,K-K]V^V.K/K_V`V:K;KJM5 0 ;b=b-b?b@b[b]b^bqb`K1 2 3 4 ocpc7f8f{K|K}K`o|oqcrc_b`bcL{b4edL|b* + , }b- . / /f~b4b6 Vb7 5bWb8 IbzcAcBce Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# MbCcDcEcu Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' QbFcGcHcK RbL M N O P Q R S T SbU V W X CbY Z DbTb{V|V}V;w~VaWbWcW1KdWeW2KKfOfQf3K4KfWgWhWiWjWkW5KlW6KmWnWTAoWpWqWrW7KsWtW8KTfXfZf9K!KuWvWwWxWyWzW#KAW$KBWCWDWEWFWGWHWIW

382 byte_val = value 2RKSKTKUKVKWKXKYK.V/V:V;V=V?V@V[V]V^V_V`V5 0 ;b=b-b?b@b[b]b^b`K1 2 3 4 ocpc7f8f{K|K}K`o|oqcrc_b`bcL{b4edL|b* + , }b- . / /fIbzcAcBcMbCcDcEcQbFcGcHc{V|V}V;w~VaWbWcW1KdWeW2KKfOfQf3K4KfWgWhWiWjWkW5KlW6KmWnWTAoWpWqWrW7KsWtW8KTfXfZf9K!KuWvWwWxWyWzW#KAW$KBWCWDWEWFWGWHWIW

383 return (<unsigned int>byte_val, <unsigned int>1) 2RKSKTKUKVKWKXKYK.V/V:V;V=V?V@V[V]V^V_V`V5 0 ;b=b-b?b@b[b]b^b`K1 2 3 4 ocpc7f8f{K|K}K`o|oqcrc_b`bcL{b4edL|b* + , }b- . / /fIbMbQb{V|V}V;w~VaWbWcW1KdWeW2KKfOfQf3K4KfWgWhWiWjWkW5KlW6KmWnWTAoWpWqWrW7KsWtW8KTfXfZf9K!KuWvWwWxWyWzW#KAW$KBWCWDWEWFWGWHWIW

384  

385 if isinstance(value, bytes): 2%K'K(K)K*K+K,K-K.K/K:K;KJMqb~b4b6 Vb7 5bWb8 e Jbf g h i j k l m n Kbo p q r ybs t zbLbac6b9 Xb! 7bYb# u Nbv w x y z A B C D ObE F G H AbI J BbPbbc8b$ Zb% 9b0b' K RbL M N O P Q R S T SbU V W X CbY Z DbTb

386 return _read_fill_ptr(<const char*><bytes>value, <Py_ssize_t>len(value)) 2%K'K(K)K*K+K,K-K.K/K:K;KJM4b6 Vb7 5bWb8 6b9 Xb! 7bYb# 8b$ Zb% 9b0b'

387  

388 if PyObject_GetBuffer(value, &buf, PyBUF_SIMPLE) != 0: 2qb~be Jbf g h i j k l m n Kbo p q r ybs t zbLbacu Nbv w x y z A B C D ObE F G H AbI J BbPbbcK RbL M N O P Q R S T SbU V W X CbY Z DbTb

389 raise TypeError( 

390 f"value must be an int or support the buffer protocol, " 

391 f"got {type(value).__name__}" 

392 ) 

393 try: 2qbe Jbf g h i j k l m n Kbo p q r ybs t zbLbu Nbv w x y z A B C D ObE F G H AbI J BbPbK RbL M N O P Q R S T SbU V W X CbY Z DbTb

394 return _read_fill_ptr(<const char*>buf.buf, buf.len) 2qbe Jbf g h i j k l m n Kbo p q r ybs t zbLbu Nbv w x y z A B C D ObE F G H AbI J BbPbK RbL M N O P Q R S T SbU V W X CbY Z DbTb

395 finally: 

396 PyBuffer_Release(&buf) 

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: 2%W'WdMeM(W)W*W+WfMgM( ) UJVJ7J8JWJXJ9J!J%J,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgX+g,g-g.g!d#d/g:ghXiXjXkXsctcucvcwcxcwh_e`e{cxhIe

403 return 2%W'WdMeM(W)W*W+WfMgM( ) UJVJ7J8JWJXJ9J!J%J,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgX+g,g-g.g!d#d/g:ghXiXjXkXsctcucvcwcxcIe

404 _fork_warning_checked = True 2%Jwh_e`e{cxhIe

405  

406 # Common warning message parts 

407 common_message = ( 

408 "CUDA does not support. Forked subprocesses exhibit undefined behavior, " 2%Jwh_e`e{cxhIe

409 "including failure to initialize CUDA contexts and devices. Set the start method " 

410 "to 'spawn' before creating processes that use CUDA. " 

411 "Use: multiprocessing.set_start_method('spawn')" 

412 ) 

413  

414 try: 2%Jwh_e`e{cxhIe

415 start_method = multiprocessing.get_start_method() 2%Jwh_e`e{cxhIe

416 if start_method == "fork": 2%Jwh_e`e{cIe

417 message = f"multiprocessing start method is 'fork', which {common_message}" 2_e`e{cIe

418 warnings.warn(message, UserWarning, stacklevel=3) 2_e`e{cIe

419 except RuntimeError: 2xh

420 # get_start_method() can raise RuntimeError if start method hasn't been set 

421 # In this case, default is 'fork' on Linux, so we should warn 

422 if platform.system() == "Linux": 2xh

423 message = ( 

424 f"multiprocessing start method is not set and defaults to 'fork' on Linux, " 2xh

425 f"which {common_message}" 

426 ) 

427 warnings.warn(message, UserWarning, stacklevel=3) 2xh