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

201 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 01:23 +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 

6import multiprocessing 

7import platform 

8import warnings 

9from collections.abc import Sequence 

10from typing import Any, Callable, NamedTuple 

11  

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

13  

14# Module-level annotations that reference `driver`, `nvrtc`, and `runtime` so 

15# that stubgen-pyx keeps these imports in the generated `.pyi` (it would 

16# otherwise trim them as unused). These names are not assigned, so they only 

17# affect __annotations__ and have no runtime cost. 

18_keep_driver_in_stub: 'driver.CUresult' 

19_keep_nvrtc_in_stub: 'nvrtc.nvrtcResult' 

20_keep_runtime_in_stub: 'runtime.cudaError_t' 

21  

22from cuda.bindings.nvvm import nvvmError 

23from cuda.bindings.nvjitlink import nvJitLinkError 

24  

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

26  

27from cuda.bindings cimport cynvrtc, cynvvm, cynvjitlink 

28from cuda.core._rt cimport ( 

29 register_warning_category, 

30 take_last_error_detail, 

31) 

32  

33from cuda.core._utils.driver_cu_result_explanations import DRIVER_CU_RESULT_EXPLANATIONS 

34from cuda.core._utils.runtime_cuda_error_explanations import RUNTIME_CUDA_ERROR_EXPLANATIONS 

35  

36  

37class CUDAError(Exception): 

38 """Raised when a CUDA driver or runtime call fails. 

39  

40 The message names the CUDA error and, when one is known, explains it. A 

41 secondary failure observed while the error was being raised, such as a 

42 failed restoration of the caller's CUDA context, is attached as a note 

43 (``__notes__``). See the error handling page of the ``cuda.core`` 

44 documentation for the guarantees an exception provides. 

45 """ 

46  

47  

48class CUDAWarning(RuntimeWarning): 

49 """Warning issued when ``cuda.core`` hits a CUDA error it cannot raise. 

50  

51 ``cuda.core`` raises exceptions for failures in ordinary calls. Some failures 

52 happen where no exception can propagate: while a resource is released by the 

53 garbage collector or by a CUDA callback, including the driver calls that 

54 switch and restore the CUDA context around such a release. Those failures 

55 are reported as this warning instead, and the affected resource may have 

56 leaked. 

57  

58 Filter on this category to make such failures fatal in tests:: 

59  

60 warnings.filterwarnings("error", category=cuda.core.CUDAWarning) 

61  

62 Because the report comes from a destructor, an escalated warning cannot be 

63 raised into user code; it is delivered through :func:`sys.unraisablehook` 

64 (which pytest surfaces as ``PytestUnraisableExceptionWarning``). 

65  

66 .. versionadded:: 1.3.0 

67 """ 

68  

69  

70# Route the C++ handle layer's non-propagating reports through this category. 

71register_warning_category(<PyObject*>CUDAWarning) 

72  

73  

74class NVRTCError(CUDAError): 

75 """Raised when an NVRTC call fails; the compiler log is appended when available.""" 

76  

77  

78  

79class ComputeCapability(NamedTuple): 

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

81 major: int 

82 minor: int 

83  

84  

85def cast_to_3_tuple(label: str, cfg: int | tuple[int, ...]) -> tuple[int, int, int]: 

86 cfg_orig = cfg 2Dfy EfFfz A GfHfIfeeJfKfLfMfq feNfOfPfgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 QfRfSfTfUfVfVhWhXhYh2eZh0h3e1h4e2h5e3h6e4h7e5h6h7h8h9h!h#h$h%h'hk f (hWfAbXf)hheiejekele1 g h i j 2 3 4 5 BbCbDbme$b%b'bYfZf0f1f2f3f*h+h,h-h.h/h:h(b)b*b;h+b,b-bne.b=hl 6 oepe4f5f6f7fr 8f7 m n o vdwd9fxdrcsc8 /g:g^G_G`G;g{G?h8e|G}G~GaH@h!f#fyd$f%f'f(f)f*f+f,f-f.f/f:f;f9e!e=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFg[hbH]hcHdHeHfHzdd AdBdGgHgIgCdtcuc^h_h`h{h|h}h~haibiPbcidieifigihiiijikiliminioipiqirisitiuiviwixiyizi=gKGLGDGgH?g

87 if isinstance(cfg, int): 2Dfy EfFfz A GfHfIfeeJfKfLfMfq feNfOfPfgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 QfRfSfTfUfVfVhWhXhYh2eZh0h3e1h4e2h5e3h6e4h7e5h6h7h8h9h!h#h$h%h'hk f (hWfAbXf)hheiejekele1 g h i j 2 3 4 5 BbCbDbme$b%b'bYfZf0f1f2f3f*h+h,h-h.h/h:h(b)b*b;h+b,b-bne.b=hl 6 oepe4f5f6f7fr 8f7 m n o vdwd9fxdrcsc8 /g:g^G_G`G;g{G?h8e|G}G~GaH@h!f#fyd$f%f'f(f)f*f+f,f-f.f/f:f;f9e!e=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFg[hbH]hcHdHeHfHzdd AdBdGgHgIgCdtcuc^h_h`h{h|h}h~haibiPbcidieifigihiiijikiliminioipiqirisitiuiviwixiyizi=gKGLGDGgH?g

88 cfg = (cfg,) 2Dfy EfFfz A GfHfIfeeJfKfLfMfq feNfOfPfgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 QfRfSfTfUfVfVhWhXhZh1h2h3h4h5h6h7h8h9h!h#h$h%h'hk f (hWfAbXf)hheiejekele1 g h i j 2 3 4 5 BbCbDbme$b%b'bYfZf0f1f2f3f*h+h,h-h.h/h:h(b)b*b;h+b,b-bne.b=hl 6 oepe4f5f6f7fr 8f7 m n o vdwd9fxdrcsc8 /g:g^G_G`G;g{G8e|G}G~GaH!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~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgbHcHdHeHfHzdd AdBdGgHgIgCdtcuc^h_h{h|h~haiPbcidifigiiijilimioipirisiuivixiyi=gKG

89 else: 

90 common = "must be an int, or a tuple with up to 3 ints" 2Yh2e0h3e4e5e6e7e$b%b'b(b)b*b+b,b-b:g;g?h8e@hyd9e!e[h]h`h}hbiPbeihikiniqitiwizi=gLGDGgH?g

91 if not isinstance(cfg, tuple): 2Yh2e0h3e4e5e6e7e$b%b'b(b)b*b+b,b-b:g;g?h8e@hyd9e!e[h]h`h}hbiPbeihikiniqitiwizi=gLGDGgH?g

92 raise ValueError(f"{label} {common} (got {type(cfg)})") 2gH

93 if len(cfg) > 3: 2Yh2e0h3e4e5e6e7e$b%b'b(b)b*b+b,b-b:g;g?h8e@hyd9e!e[h]h`h}hbiPbeihikiniqitiwizi=gLGDG?g

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

95 if any(not isinstance(val, int) for val in cfg): 2Yh2e0h3e4e5e6e7e$b%b'b(b)b*b+b,b-b:g;g?h8e@hyd9e!e[h]h`h}hbiPbeihikiniqitiwizi=gDG?g

96 raise ValueError(f"{label} {common} (got {cfg})") 2DG

97 if any(val < 1 for val in cfg): 2Dfy EfFfz A GfHfIfeeJfKfLfMfq feNfOfPfgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 QfRfSfTfUfVfVhWhXhYh2eZh0h3e1h4e2h5e3h6e4h7e5h6h7h8h9h!h#h$h%h'hk f (hWfAbXf)hheiejekele1 g h i j 2 3 4 5 BbCbDbme$b%b'bYfZf0f1f2f3f*h+h,h-h.h/h:h(b)b*b;h+b,b-bne.b=hl 6 oepe4f5f6f7fr 8f7 m n o vdwd9fxdrcsc8 /g:g^G_G`G;g{G?h8e|G}G~GaH@h!f#fyd$f%f'f(f)f*f+f,f-f.f/f:f;f9e!e=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFg[hbH]hcHdHeHfHzdd AdBdGgHgIgCdtcuc^h_h`h{h|h}h~haibiPbcidieifigihiiijikiliminioipiqirisitiuiviwixiyizi=gKG?g

98 plural_s = "" if len(cfg) == 1 else "s" 28eKG?g

99 raise ValueError(f"{label} value{plural_s} must be >= 1 (got {cfg_orig})") 28eKG?g

100 return cfg + (1,) * (3 - len(cfg)) 2Dfy EfFfz A GfHfIfeeJfKfLfMfq feNfOfPfgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 QfRfSfTfUfVfVhWhXhYh2eZh0h3e1h4e2h5e3h6e4h7e5h6h7h8h9h!h#h$h%h'hk f (hWfAbXf)hheiejekele1 g h i j 2 3 4 5 BbCbDbme$b%b'bYfZf0f1f2f3f*h+h,h-h.h/h:h(b)b*b;h+b,b-bne.b=hl 6 oepe4f5f6f7fr 8f7 m n o vdwd9fxdrcsc8 /g:g^G_G`G;g{G?h8e|G}G~GaH@h!f#fyd$f%f'f(f)f*f+f,f-f.f/f:f;f9e!e=f?f@f[f]f^f_f`f{f|f}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFg[hbH]hcHdHeHfHzdd AdBdGgHgIgCdtcuc^h_h`h{h|h}h~haibiPbcidieifigihiiijikiliminioipiqirisitiuiviwixiyizi=g

101  

102  

103cdef int _get_current_device_id() except? -1: 

104 """Return the current thread's bound CUdevice ordinal.""" 

105 cdef cydriver.CUdevice dev 

106 with nogil: 

107 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 

108 return <int>dev 

109  

110  

111cdef int _raise_nvrtc_error(cynvrtc.nvrtcProgram prog, cynvrtc.nvrtcResult err) except -1: 

112 """Build error message with program log and raise NVRTCError.""" 

113 cdef const char* err_str = cynvrtc.nvrtcGetErrorString(err) 1ca

114 cdef size_t logsize = 0 1ca

115 if prog != NULL: 1ca

116 cynvrtc.nvrtcGetProgramLogSize(prog, &logsize) 1ca

117 cdef bytes log_bytes 

118 cdef str log_str = "" 1ca

119 if logsize > 1 and prog != NULL: 1ca

120 log_bytes = b" " * logsize 1ca

121 if cynvrtc.nvrtcGetProgramLog(prog, <char*>log_bytes) == cynvrtc.nvrtcResult.NVRTC_SUCCESS: 1ca

122 log_str = log_bytes.decode("utf-8", errors="backslashreplace") 1ca

123 err_msg = f"{err}: {err_str.decode()}" if err_str != NULL else f"NVRTC error {err}" 1ca

124 if log_str: 1ca

125 err_msg += f", compilation log:\n\n{log_str}" 1ca

126 raise NVRTCError(err_msg) 1ca

127  

128  

129cdef int _raise_nvvm_error(cynvvm.nvvmProgram prog, cynvvm.nvvmResult err) except -1: 

130 """Raise nvvmError annotated with the program log.""" 

131 cdef size_t logsize = 0 2;b

132 if prog != NULL: 2;b

133 cynvvm.nvvmGetProgramLogSize(prog, &logsize) 2;b

134 cdef bytes log_bytes 

135 cdef str log_str = "" 2;b

136 if logsize > 1 and prog != NULL: 2;b

137 log_bytes = b" " * logsize 2;b

138 if cynvvm.nvvmGetProgramLog(prog, <char*>log_bytes) == cynvvm.nvvmResult.NVVM_SUCCESS: 2;b

139 log_str = log_bytes.decode("utf-8", errors="backslashreplace") 2;b

140 cdef object exc = nvvmError(err) 2;b

141 if log_str: 2;b

142 exc.args = (exc.args[0] + f"\nNVVM program log: {log_str}", *exc.args[1:]) 2;b

143 raise exc 2;b

144  

145  

146cdef int _raise_nvjitlink_error( 

147 cynvjitlink.nvJitLinkHandle handle, cynvjitlink.nvJitLinkResult err) except -1: 

148 """Raise nvJitLinkError annotated with the error log.""" 

149 cdef size_t logsize = 0 2b Jg

150 if handle != NULL: 2b Jg

151 cynvjitlink.nvJitLinkGetErrorLogSize(handle, &logsize) 1b

152 cdef bytes log_bytes 

153 cdef str log_str = "" 2b Jg

154 if logsize > 1 and handle != NULL: 2b Jg

155 log_bytes = b" " * logsize 1b

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

157 cynvjitlink.nvJitLinkResult.NVJITLINK_SUCCESS: 1b

158 log_str = log_bytes.decode("utf-8", errors="backslashreplace") 1b

159 cdef object exc = nvJitLinkError(err) 2b Jg

160 if log_str: 2b Jg

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

162 raise exc 2b Jg

163  

164  

165cdef object _RUNTIME_SUCCESS = runtime.cudaError_t.cudaSuccess 

166cdef object _NVRTC_SUCCESS = nvrtc.nvrtcResult.NVRTC_SUCCESS 

167  

168  

169cdef inline void _attach_detail(exc, str detail): 

170 # PEP 678 notes keep the detail separable from the message. 

171 exc.add_note(detail) 1est

172  

173  

174cpdef inline int _check_driver_error(cydriver.CUresult error) except?-1 nogil: 

175 if error == cydriver.CUresult.CUDA_SUCCESS: 2vcAiBiCiwcDiEixcFi#eGiHiIiJiycKizcLiAcMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6iee7i8i9i!i#i$i%i'iq (iBc)ife*i+i,i-i.iqe/i:ige;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrj$esjtjuj%evjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l'e3l4l5l6l7l8l9l!l(e#l$l%l'l(l)l*l+l,l-l)e.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImhHJmKmLmk Mmf NmOmPmQmAbRmSmTmUmVm=bWm?bXm/bYmZm@b0m1m[b2m]b3m^b4m5m6m_b7m8m9m!m#m$m%m'm(m*e)m*mhe+mie,mje-mke.mle/m:m;m=m?m1 @m[m]miH^m_m`mDc{m+e|m}m~manbncndn`ben{bfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnmeGnHnInJnKnLnMn$bNn%bOn'bPnjHQnkHRnlHSnTnUnVnWnXnYnZn0n1nYf2nZf3n0f4nfS5ngS6nhS7nmH8nnH9n!n#n$n%n'n1f(n2f)n3f*niS+njS,nkS-noH.npH/n:n;n=n?n@n[n@g]n^nlS_nqH`n{n|n}n~naobo(bco)bdo*beorHfosHgotHhoiojokolomonoEcoopoqoroso+bto,buo-bvouHwovHxowHyozoAoBoCoDoneEo.bFoGo[gHo]gIoJoKoEbLo|bMo}bNo~bOo^gPoxHQoyHRol SoToUoVoWo6 XooeYopeZo0o1o2o3o4or 5o6o7 7o8o9o!oac#oseMG$oteNG%oFd'oGd(omSOG)ozH*oAH+o,o-oPG.obc/oHd:oQG;oueRG=occ?odc@oec[oId]oveSG^oweTG_oxeUG`oyeVG{oWG|oXG}oYG~oZGap0Gbp1Gcp2Gdp3GepBHfpCHgpnShpoSippSjpqSkpfclp_gmp`gnpgcophcpprSqpicrp{gspDHtp|gupEHvp}gwp~gxpFHypahzpsSApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrJdnru orp prqrrrKdsrtrv urvrJcwrxrjfyrkfzrBeArBrCrDrErlfFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZr0r1r2r3r4r5r6r7r8r9r!rmfLd#r$r%r'r(r)r*r+r,r-r.r/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsDegse hsEeiss jsFekslsvhmst nsospsvdqsrssstsusvswsxswdyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9sxd!src#ssc$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytzt!fAt#fBtCt$fDt%fEt'fFt(fGt)fHt*fIt+fJt,fKt-fLt.fMt/fNt:fOt;fPtQtRt=fSt?fTt@fUt[fVt]fWt^fXt_fYt`fZt{f0t|f1t}f2t~f3tag4tbg5tcg6tdg7teg8tfg9tgg!thg#tig$tjg%tkg'tlg(tmg)tng*tog+tpg,tqg-trg.tsg/ttg:tug;tvg=twg?txg@tyg[tzg]tAg^tBg_tCg`tDg{tEg|tFg}t~taubucuduzdeud fuguhuAdiuBdjukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9u!u#ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:b:wPe;w=w?w@wPh[wQe]w^w_w`w2c{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxpfwxxxSeyxzxAxBxCxDxExFxGxHxTeIxw JxUeKxVeLxqfMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZxrf0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xsf+x,x-x.x/x:xCd;x=xx ?x@x[x]x^x_x`x{x|x}xtf~xaybycydyeyfygyhyiyjykylymytcnyucoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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(C4c)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbD#bcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+EGH,E-E.E/E:E;E=E?E@E[E]E^E_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

176 return 0 2vcAiBiCiDiEiFi#eGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6iee7i8i9i!i#i$i%i'i(i)ife*i+i,i-i.iqe/i:ige;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImhHJmKmLmk Mmf NmOmPmQmAbRmSmTmUmVm=bWm?bXm/bYmZm@b0m1m[b2m]b3m^b4m5m6m_b7m8m9m!m#m$m%m'm(m)m*mhe+mie,mje-mke.mle/m:m;m=m?m1 @m[m]miH^m_m`m{m|m}m~manbncndnenfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnmeGnHnInJnKnLnMn$bNn%bOn'bPnjHQnkHRnlHSnTnUnVnWnXnYnZn0n1nYf2nZf3n0f4nfS5ngS6nhS7nmH8nnH9n!n#n$n%n'n1f(n2f)n3f*niS+njS,nkS-noH.npH/n:n;n=n?n@n[n@g]n^nlS_nqH`n{n|n}n~naobo(bco)bdo*beorHfosHgotHhoiojokolomonooopoqoroso+bto,buo-bvouHwovHxowHyozoAoBoCoDoneEo.bFoGo[gHo]gIoJoKoEbLo|bMo}bNo~bOo^gPoxHQoyHRol SoToUoVoWo6 XooeYopeZo0o1o2o3o4o5o6o7 7o8o9o!oac#oseMG$oteNG%oFd'oGd(omSOG)ozH*oAH+o,o-oPG.obc/oHd:oQG;oueRG=occ?odc@oec[oId]oveSG^oweTG_oxeUG`oyeVG{oWG|oXG}oYG~oZGap0Gbp1Gcp2Gdp3GepBHfpCHgpnShpoSippSjpqSkpfclp_gmp`gnpgcophcpprSqpicrp{gspDHtp|gupEHvp}gwp~gxpFHypahzpsSApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrJdnru orp prqrrrKdsrtrv urvrJcwrxrjfyrkfzrBeArBrCrDrErlfFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZr0r1r2r3r4r5r6r7r8r9r!rLd#r$r%r'r(r)r*r+r,r-r.r/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsDegse hsEeiss jsFekslsvhmst nsospsvdqsrssstsusvswsxswdyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9sxd!src#ssc$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytzt!fAt#fBtCt$fDt%fEt'fFt(fGt)fHt*fIt+fJt,fKt-fLt.fMt/fNt:fOt;fPtQtRt=fSt?fTt@fUt[fVt]fWt^fXt_fYt`fZt{f0t|f1t}f2t~f3tag4tbg5tcg6tdg7teg8tfg9tgg!thg#tig$tjg%tkg'tlg(tmg)tng*tog+tpg,tqg-trg.tsg/ttg:tug;tvg=twg?txg@tyg[tzg]tAg^tBg_tCg`tDg{tEg|tFg}t~taubucuduzdeud fuguhuAdiuBdjukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9u!u#ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:wPe;w=w?w@wPh[wQe]w^w_w`w{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxpfwxxxSeyxzxAxBxCxDxExFxGxHxTeIxw JxUeKxVeLxqfMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZxrf0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xsf+x,x-x.x/x:xCd;x=xx ?x@x[x]x^x_x`x{x|x}xtf~xaybycydyeyfygyhyiyjykylymytcnyucoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~CaDbD#bcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+EGH,E-E.E/E:E;E=E?E@E[E]E^E_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

177 cdef const char* name 

178 cdef const char* desc 

179 # A context-scoped helper in the handle layer may have recorded why this 

180 # status needs more explanation (e.g. the caller's context was not restored). 

181 cdef const char* detail = take_last_error_detail(error) 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

182 name_err = cydriver.cuGetErrorName(error, &name) 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

183 if name_err != cydriver.CUresult.CUDA_SUCCESS: 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

184 raise CUDAError(f"UNEXPECTED ERROR CODE: {error}") 2Ld

185 desc_err = cydriver.cuGetErrorString(error, &desc) 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

186 with gil: 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

187 # TODO: consider lower this to Cython 

188 expl = DRIVER_CU_RESULT_EXPLANATIONS.get(int(error)) 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

189 if expl is not None: 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

190 exc = CUDAError(f"{name.decode()}: {expl}") 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

191 elif desc_err != cydriver.CUresult.CUDA_SUCCESS: 

192 exc = CUDAError(name.decode()) 

193 else: 

194 exc = CUDAError(f"{name.decode()}: {desc.decode()}") 

195 if detail != NULL: 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

196 _attach_detail(exc, detail.decode()) 1est

197 raise exc 2wcxcyczcAcq Bc$e%e'e(e)e*eDc+e`b{bEcEbl r u p v mfLde s t :b2cw x 4c

198  

199  

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

201 if error == _RUNTIME_SUCCESS: 2QhHHKgRhShThUh

202 return 0 2QhKgRhShThUh

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

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

205 name = error.name 2HHKg

206 expl = RUNTIME_CUDA_ERROR_EXPLANATIONS.get(int(error)) 2HHKg

207 if expl is not None: 2HHKg

208 raise CUDAError(f"{name}: {expl}") 2HHKg

209 desc_err, desc = runtime.cudaGetErrorString(error) 2Kg

210 if desc_err != _RUNTIME_SUCCESS: 2Kg

211 raise CUDAError(f"{name}") 

212 desc = desc.decode() 2Kg

213 raise CUDAError(f"{name}: {desc}") 2Kg

214  

215  

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

217 if error == _NVRTC_SUCCESS: 2vcwGIH6cd 7c8cb 9c!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~cadbdcdddedfdgdNdOdPdLgQdMgRdNgSdOgPgTdUdVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtdc ,d-d.d/d:d;d=d?dQg@d[d#ba RgSg]dxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g^d_d`d{d|d}d~daebece

218 return 0 2vcIH6cd 7c8cb 9c!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~cadbdcdddedfdgdNdOdPdLgQdMgRdNgSdOgPgTdUdVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtdc ,d-d.d/d:d;d=d?dQg@d[d#ba RgSg]dxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g^d_d`d{d|d}d~daebece

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

220 if handle is not None: 2wGIH

221 _, logsize = nvrtc.nvrtcGetProgramLogSize(handle) 2wG

222 log = b" " * logsize 2wG

223 _ = nvrtc.nvrtcGetProgramLog(handle, log) 2wG

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

225 raise NVRTCError(err) 2wGIH

226  

227  

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

229 if isinstance(error, driver.CUresult): 2vcAiBiCiDiEiFi#eGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.iqe/i:i;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImJmKmLmk Mmf NmOmPmQmAbRmSmTmUmVm=bWm?bXm/bYmZm@b0m1m[b2m]b3m^b4m5m6m_b7m8m9m!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~manbncndnenfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnUnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohojolomonooopoqorosotouovowoxoyoAoCoDoEo.bFoGoHoIoKoLo|bMo}bNo~bOo^gPoQoRoSoToUoVoWo6 XoYoZo0o1o2o3o4o5o6o7 7o8o9o!oac#ose$ote%oFd'oGd(o)o*o+o,o-o.obc/oHd:o;oue=occ?odc@oec[oId]ove^owe_oxe`oye{o|o}o~oapbpcpdpepfpgphpipjpkpfclp_gmp`gnpgcophcppqpicrp{gsptp|gupvp}gwp~gxpypahzpApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrJdnru orp prqrrrKdsrtrv urvrJcwrxrjfyrkfzrBeArBrCrDrErlfFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZrQh0r1r2r3r4r5r6r7r8r9r!r#rRh$r%r'r(r)r*r+r,r-r.rSh/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasThbscsdsUhesfsDegse hsEeiss jsFekslsvhmst nsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucu6cdueud fu7cgu8chuiujub 9cku!clu#cmu$cnu%cou'cpu(cqu)cru*csu+ctu,cuu-cvu.cwu/cxu:cyu;czu=cAu?cBu@cCu[cDu]cEu^cFu_cGu`cHu{cIu|cJu}cKu~cLuadMubdNucdOuPuddQuRuedSufdTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9u!u#ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:wPe;w=w?w@wPh[wQe]w^w_w`w{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxpfwxxxSeyxzxAxBxCxDxExFxGxHxTeIxw JxUeKxVeLxqfMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZxrf0x1x2x3x4x5x6x7x8x9x!x#x$x%xgd'x(x)x*xsf+x,x-x.x/x:x;x=xx ?x@x[x]x^x_x`x{x|x}xtf~xaybycydyNdeyOdfyPdgyhyiyjyLgQdkyMgRdlyNgSdmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqAOgrAsAtAPguAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCTdrCUdsCVdtCWduCXdvCYdwCZdxChdyCidzCjdAC0dBC1dCC2dDC3dECpcFCqcGCkdHC4dICldJC5dKC6dLC7dMC8dNCmdOC9dPCndQCodRCpdSCqdTC!dUC#dVC$dWC%dXC'dYC(dZC)d0C*d1C+d2Crd3Csd4Ctd5C6Cc 7C,d8C-d9C.d!C/d#C:d$C;d%C=d'C?d(CQg)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C@d_C`C[d{C|C}C~CaDbD#bcDdDeDfDgDhDa iDRgSg]djDxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6gkD7g8g9g!g#g$g%g'g(g)glDmDnDoD*g+g,g^d_d`d{d|dpD}d~daebeceqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?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_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

230 return _check_driver_error(error) 2vcAiBiCiDiEiFi#eGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.iqe/i:i;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImJmKmLmk Mmf NmOmPmQmAbRmSmTmUmVm=bWm?bXm/bYmZm@b0m1m[b2m]b3m^b4m5m6m_b7m8m9m!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~manbncndnenfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnUnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohojolomonooopoqorosotouovowoxoyoAoCoDoEo.bFoGoHoIoKoLo|bMo}bNo~bOo^gPoQoRoSoToUoVoWo6 XoYoZo0o1o2o3o4o5o6o7 7o8o9o!oac#ose$ote%oFd'oGd(o)o*o+o,o-o.obc/oHd:o;oue=occ?odc@oec[oId]ove^owe_oxe`oye{o|o}o~oapbpcpdpepfpgphpipjpkpfclp_gmp`gnpgcophcppqpicrp{gsptp|gupvp}gwp~gxpypahzpApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrJdnru orp prqrrrKdsrtrv urvrJcwrxrjfyrkfzrBeArBrCrDrErlfFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsDegse hsEeiss jsFekslsvhmst nsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9u!u#ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:wPe;w=w?w@wPh[wQe]w^w_w`w{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxpfwxxxSeyxzxAxBxCxDxExFxGxHxTeIxw JxUeKxVeLxqfMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZxrf0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xsf+x,x-x.x/x:x;x=xx ?x@x[x]x^x_x`x{x|x}xtf~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~CaDbD#bcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?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_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

231 elif isinstance(error, runtime.cudaError_t): 2vcQhRhShThUh6cd 7c8cb 9c!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~cadbdcdddedfdgdNdOdPdLgQdMgRdNgSdOgPgTdUdVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtdc ,d-d.d/d:d;d=d?dQg@d[d#ba RgSg]dxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g^d_d`d{d|d}d~daebece

232 return _check_runtime_error(error) 2QhRhShThUh

233 elif isinstance(error, nvrtc.nvrtcResult): 2vc6cd 7c8cb 9c!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~cadbdcdddedfdgdNdOdPdLgQdMgRdNgSdOgPgTdUdVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtdc ,d-d.d/d:d;d=d?dQg@d[d#ba RgSg]dxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g^d_d`d{d|d}d~daebece

234 return _check_nvrtc_error(error, handle=handle) 2vc6cd 7c8cb 9c!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~cadbdcdddedfdgdNdOdPdLgQdMgRdNgSdOgPgTdUdVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtdc ,d-d.d/d:d;d=d?dQg@d[d#ba RgSg]dxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g^d_d`d{d|d}d~daebece

235 else: 

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

237  

238  

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

240 _check_error(result[0], handle=handle) 2vcAiBiCiDiEiFi#eGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.iqe/i:i;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImJmKmLmk Mmf NmOmPmQmAbRmSmTmUmVm=bWm?bXm/bYmZm@b0m1m[b2m]b3m^b4m5m6m_b7m8m9m!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~manbncndnenfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnUnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohojolomonooopoqorosotouovowoxoyoAoCoDoEo.bFoGoHoIoKoLo|bMo}bNo~bOo^gPoQoRoSoToUoVoWo6 XoYoZo0o1o2o3o4o5o6o7 7o8o9o!oac#ose$ote%oFd'oGd(o)o*o+o,o-o.obc/oHd:o;oue=occ?odc@oec[oId]ove^owe_oxe`oye{o|o}o~oapbpcpdpepfpgphpipjpkpfclp_gmp`gnpgcophcppqpicrp{gsptp|gupvp}gwp~gxpypahzpApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrJdnru orp prqrrrKdsrtrv urvrJcwrxrjfyrkfzrBeArBrCrDrErlfFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZrQh0r1r2r3r4r5r6r7r8r9r!r#rRh$r%r'r(r)r*r+r,r-r.rSh/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasThbscsdsUhesfsDegse hsEeiss jsFekslsvhmst nsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucu6cdueud fu7cgu8chuiujub 9cku!clu#cmu$cnu%cou'cpu(cqu)cru*csu+ctu,cuu-cvu.cwu/cxu:cyu;czu=cAu?cBu@cCu[cDu]cEu^cFu_cGu`cHu{cIu|cJu}cKu~cLuadMubdNucdOuPuddQuRuedSufdTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9u!u#ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:wPe;w=w?w@wPh[wQe]w^w_w`w{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxpfwxxxSeyxzxAxBxCxDxExFxGxHxTeIxw JxUeKxVeLxqfMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZxrf0x1x2x3x4x5x6x7x8x9x!x#x$x%xgd'x(x)x*xsf+x,x-x.x/x:x;x=xx ?x@x[x]x^x_x`x{x|x}xtf~xaybycydyNdeyOdfyPdgyhyiyjyLgQdkyMgRdlyNgSdmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqAOgrAsAtAPguAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCTdrCUdsCVdtCWduCXdvCYdwCZdxChdyCidzCjdAC0dBC1dCC2dDC3dECpcFCqcGCkdHC4dICldJC5dKC6dLC7dMC8dNCmdOC9dPCndQCodRCpdSCqdTC!dUC#dVC$dWC%dXC'dYC(dZC)d0C*d1C+d2Crd3Csd4Ctd5C6Cc 7C,d8C-d9C.d!C/d#C:d$C;d%C=d'C?d(CQg)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C@d_C`C[d{C|C}C~CaDbD#bcDdDeDfDgDhDa iDRgSg]djDxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6gkD7g8g9g!g#g$g%g'g(g)glDmDnDoD*g+g,g^d_d`d{d|dpD}d~daebeceqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?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_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

241 cdef int out_len = len(result) 2vcAiBiCiDiEiFi#eGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.iqe/i:i;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImJmKmLmk Mmf NmOmPmQmAbRmSmTmUmVm=bWm?bXm/bYmZm@b0m1m[b2m]b3m^b4m5m6m_b7m8m9m!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~manbncndnenfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnUnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohojolomonooopoqorosotouovowoxoyoAoCoDoEo.bFoGoHoIoKoLo|bMo}bNo~bOo^gPoQoRoSoToUoVoWo6 XoYoZo0o1o2o3o4o5o6o7 7o8o9o!oac#ose$ote%oFd'oGd(o)o*o+o,o-o.obc/oHd:o;oue=occ?odc@oec[oId]ove^owe_oxe`oye{o|o}o~oapbpcpdpepfpgphpipjpkpfclp_gmp`gnpgcophcppqpicrp{gsptp|gupvp}gwp~gxpypahzpApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrJdnru orp prqrrrKdsrtrv urvrJcwrxrjfyrkfzrBeArBrCrDrErlfFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZrQh0r1r2r3r4r5r6r7r8r9r!r#rRh$r%r'r(r)r*r+r,r-r.rSh/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasThbscsdsUhesfsDegse hsEeiss jsFekslsvhmst nsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucu6cdueud fu7cgu8chuiujub 9cku!clu#cmu$cnu%cou'cpu(cqu)cru*csu+ctu,cuu-cvu.cwu/cxu:cyu;czu=cAu?cBu@cCu[cDu]cEu^cFu_cGu`cHu{cIu|cJu}cKu~cLuadMubdNucdOuPuddQuRuedSufdTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9u!u#ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:wPe;w=w?w@wPh[wQe]w^w_w`w{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxpfwxxxSeyxzxAxBxCxDxExFxGxHxTeIxw JxUeKxVeLxqfMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZxrf0x1x2x3x4x5x6x7x8x9x!x#x$x%xgd'x(x)x*xsf+x,x-x.x/x:x;x=xx ?x@x[x]x^x_x`x{x|x}xtf~xaybycydyNdeyOdfyPdgyhyiyjyLgQdkyMgRdlyNgSdmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqAOgrAsAtAPguAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCTdrCUdsCVdtCWduCXdvCYdwCZdxChdyCidzCjdAC0dBC1dCC2dDC3dECpcFCqcGCkdHC4dICldJC5dKC6dLC7dMC8dNCmdOC9dPCndQCodRCpdSCqdTC!dUC#dVC$dWC%dXC'dYC(dZC)d0C*d1C+d2Crd3Csd4Ctd5C6Cc 7C,d8C-d9C.d!C/d#C:d$C;d%C=d'C?d(CQg)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C@d_C`C[d{C|C}C~CaDbD#bcDdDeDfDgDhDa iDRgSg]djDxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6gkD7g8g9g!g#g$g%g'g(g)glDmDnDoD*g+g,g^d_d`d{d|dpD}d~daebeceqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?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_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

242 if out_len == 1: 2vcAiBiCiDiEiFi#eGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.iqe/i:i;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImJmKmLmk Mmf NmOmPmQmAbRmSmTmUmVm=bWm?bXm/bYmZm@b0m1m[b2m]b3m^b4m5m6m_b7m8m9m!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~manbncndnenfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnUnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohojolomonooopoqorosotouovowoxoyoAoCoDoEo.bFoGoHoIoKoLo|bMo}bNo~bOo^gPoQoRoSoToUoVoWo6 XoYoZo0o1o2o3o4o5o6o7 7o8o9o!oac#ose$ote%oFd'oGd(o)o*o+o,o-o.obc/oHd:o;oue=occ?odc@oec[oId]ove^owe_oxe`oye{o|o}o~oapbpcpdpepfpgphpipjpkpfclp_gmp`gnpgcophcppqpicrp{gsptp|gupvp}gwp~gxpypahzpApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrJdnru orp prqrrrKdsrtrv urvrJcwrxrjfyrkfzrBeArBrCrDrErlfFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZrQh0r1r2r3r4r5r6r7r8r9r!r#rRh$r%r'r(r)r*r+r,r-r.rSh/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasThbscsdsUhesfsDegse hsEeiss jsFekslsvhmst nsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucu6cdueud fu7cgu8chuiujub 9cku!clu#cmu$cnu%cou'cpu(cqu)cru*csu+ctu,cuu-cvu.cwu/cxu:cyu;czu=cAu?cBu@cCu[cDu]cEu^cFu_cGu`cHu{cIu|cJu}cKu~cLuadMubdNucdOuPuddQuRuedSufdTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9u!u#ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:wPe;w=w?w@wPh[wQe]w^w_w`w{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxpfwxxxSeyxzxAxBxCxDxExFxGxHxTeIxw JxUeKxVeLxqfMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZxrf0x1x2x3x4x5x6x7x8x9x!x#x$x%xgd'x(x)x*xsf+x,x-x.x/x:x;x=xx ?x@x[x]x^x_x`x{x|x}xtf~xaybycydyNdeyOdfyPdgyhyiyjyLgQdkyMgRdlyNgSdmynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqAOgrAsAtAPguAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!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~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCTdrCUdsCVdtCWduCXdvCYdwCZdxChdyCidzCjdAC0dBC1dCC2dDC3dECpcFCqcGCkdHC4dICldJC5dKC6dLC7dMC8dNCmdOC9dPCndQCodRCpdSCqdTC!dUC#dVC$dWC%dXC'dYC(dZC)d0C*d1C+d2Crd3Csd4Ctd5C6Cc 7C,d8C-d9C.d!C/d#C:d$C;d%C=d'C?d(CQg)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C@d_C`C[d{C|C}C~CaDbD#bcDdDeDfDgDhDa iDRgSg]djDxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6gkD7g8g9g!g#g$g%g'g(g)glDmDnDoD*g+g,g^d_d`d{d|dpD}d~daebeceqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?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_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

243 return 2y z DdA B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 EdreCck f Ab=b?b/b@b[b]b^b_bg h i j 2 3 4 5 BbCbDb.b^g6 7 acseteFdGdbcHdueccdcecIdvewexeyefc_g`ggchcic{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhrhshthzeAem n o :e;e=e?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcafbfcfdfefffgfhfifJdu p Kdv JcjfkfBelfKcLcFbuhMcNcOcPcQcRcScCeDee Ees Fevht Ge8 whxhyhzhHeIeJeKeAhBhChDhEhFhGhHh!u#ujc5bQbRbSb6bTbUbkcTcUcVc9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Iblc7bVbWbXb8bYbZbmcWcXcYc@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbnc9b0b1b2b!b3b4bocZc0c1cibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbObIhLeJhKhLhMhMeNeOeNhOhPePhQe3cRepfSeTew UeVeqfWeXeYerf#bQD5c

244 elif out_len == 2: 

245 return result[1] 2vcAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViy WiXiYiz ZiDd0iA 1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.iqe/i:i;i=iB ?iC @iD [iE ]iF ^iG _iH `iI {iJ |iK }iL ~iM ajN bjO cjP djQ ejR fjS gjT hjU ijV jjW kjX ljY mjZ nj0 ojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~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~lambmcmEddmreemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymCczmAmBmCmDmEmFmGmHmImJmKmLmMmf NmOmPmQmAbRmSmTmUmVmWmXm/bYmZm0m1m2m3m4m5m6m7m8m9m!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~manbncndnenfngnhninjnknlng mnh nni onj pn2 qn3 rn4 sn5 tnBbunCbvnDbwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnUnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!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~naobocodoeofogohojolomonooopoqorosotouovowoxoyoAoCoDoEoFoGoHoIoKoLo|bMo}bNo~bOo^gPoQoRoSoToUoVoWo6 XoYoZo0o1o2o3o4o5o6o7 7o8o9o!oac#ose$ote%oFd'oGd(o)o*o+o,o-o.obc/oHd:o;oue=occ?odc@oec[oId]ove^owe_oxe`oye{o|o}o~oapbpcpdpepfpgphpipjpkpfclp_gmp`gnpgcophcppqpicrp{gsptp|gupvp}gwp~gxpypahzpApbhBpchCpdhDpehEpFpGpHpIpJpKpLpMpNpOpfhPpQpghRpSphhTpUpihVpWpjhXpkhYplhZp,emh0p1p-enh2p3poh.eph4p5p/eqh6prh7p8psh9p!pth#p$p%p'p(p)p*pze+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqAegqhqiqjqkqlqm mqn nqo oqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q:e,q;e-q=e.q?e/q@e:q[e;q]e=q^e?q_e@q`e[q{e]q|e^q_q`q{q}e|q~e}q~qFcarGcbrHccrIcdraferbffrcfgrdfhrefirffjrgfkrhflrifmrnrorp prqrrrsrtrurvrJcwrxryrzrBeArBrCrDrErFrGrHrIrJrKrLrMrNrKcOrLcPrFbuhQrMcRrNcSrOcTrPcUrQcVrRcWrScXrYrZrQh0r1r2r3r4r5r6r7r8r9r!r#rRh$r%r'r(r)r*r+r,r-r.rSh/r:r;rCe=r?r@r[r]r^r_r`r{r|r}r~rasThbscsdsUhesfsDegse hsEeiss jsFekslsvhmst nsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*sGe+s,s-s.s/sMd:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotnfptqt8 rtstwhxhttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuyhXuzhYuHeZuIe0uJe1uKe2u3u4uAhBhChDh5u6u7uEhFhGh8uHh9ujc$u5b%uQb'uRb(uSb)u6b*uTb+uUb,ukc-uTc.uUc/uVc:u9 ;uGb=u! ?u# @u$ [u% ]u' ^u( _u) `u* {u+ |uHb}u, ~u- av. bv/ cv: dv; ev= fv? gvIbhvlciv7bjvVbkvWblvXbmv8bnvYbovZbpvmcqvWcrvXcsvYctv@ uvJbvv[ wv] xv^ yv_ zv` Av{ Bv| Cv} Dv~ EvKbFvabGvbbHvcbIvdbJvebKvfbLvgbMvhbNvLbOvncPv9bQv0bRv1bSv2bTv!bUv3bVv4bWvocXvZcYv0cZv1c0vib1vMb2vjb3vkb4vlb5vmb6vnb7vob8vpb9vqb!vrb#vNb$vsb%vtb'vub(vvb)vwb*vxb+vyb,vzb-vOb.vIh/vLe:v;v=v?v@v[v]v^vof_v`v{v|v}v~vJhKhLhawMhbwMeNecwdwewOefwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/wNhOh:wPe;w=w?w@wPh[wQe]w^w_w`w{w|w}w~waxbxcxdxex3cfxgxhxixjxkxlxmxnxoxRepxqxrxsxtxuxvxwxxxSeyxzxAxBxCxDxExFxGxHxTeIxJxUeKxVeLxMxWeNxXeOxPxQxRxSxYeTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xsf+x,x-x.x/x:x;x=xx ?x@x[x]x^x_x`x{x|x}xtf~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~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;Duf=Dvf?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_E5c`E{E|Ewf}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/FZe:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvG

246 else: 

247 return result[1:] 2vc#ey z DdA qeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 Ed6 7 6cd 7c8cb 9c!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~cadbdcdddedfdgdNdOdPdLgQdMgRdNgSdOgPgTdUdVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtdc ,d-d.d/d:d;d=d?dQg@d[d#ba RgSg]dxfyfzfAfBfCfTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g^d_d`d{d|d}d~daebece

248  

249  

250cpdef object check_or_create_options(type cls, object options, str options_description="", bint keep_none=False): 

251 """ 

252 Create the specified options dataclass from a dictionary of options or None. 

253 """ 

254 if options is None: 26I7I8Iwc9Ixc#e!I#I$IyczcAc%I'IDf(I)I*I+I,I-Iy EfFfz DdA Gf.I/IHfIfeeJf:IKfLf;I=IMfq Bcfe?INfOfPfqe@IgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 [I]I^I_I`I{I|I}I~IQfaJbJcJRfSfTfUfVf4G5G6G7G8G9G!G#GVhWhXhdJeJ2eZhfJgJ3e1hhJiJ4e2hjJkJ5e3hlJmJ6e4hnJoJ7e5h6h7h8h9hpJqJrJ!h#h$h%hEdresJtJuJ'hvJwJxJyJCcJHzJAJBJCJDJEJFJGJhHcIKHk f HJ(hWfAbXfIJJJKJ=b?b/bLJ@bLH[b]b^bMJNJ_b)hOJPJheiejekele1 DcdIeIfIgIhIiI`b{bjIkIlIQJRJSJg h i j 2 3 4 5 BbCbDbTJUJVJWJXJYJZJme0J1J2J3J4J$b%b'bjHkHlHTnVn5J6JYfZf0f7J8J1f2f3f9J*h+h,h-h.h@g/h:h!J#J$J%J'J(b)b*brHsHtHioko;h(JEc)J*J+J,J+b,b-buHvHwHzoBo-Jne.b=h[g]gJoEb|b}b~bl .J/J:J;J6 oepe=J4f5f6f7fr 8f7 mI$GnIacoIMGteNGFd?JGd@JOGpIAH[J]JqI^JrIPGbcsIHdQGueRGcc_Jdc`Jec{JIdveSGweTGxeUGyeVGWGXGYGZG0G1G2G3GBH|JCH}J~JaKbKcKfcdKeKfKgcgKhchKiciKjKDHkKEHlKmKFHnKoKpKqKrKsKtKuKvKwKxK,eyKzKtIAK-eBKCKDK.eEKFKGK/eHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKzeXKYKZK0K1K2K3K4KMH5KNH6K7K8K9K!K#K$K%KOH'KPH(KQH)KRH*K+K,KAe-K.K/K:K;Km =Kn ?Ko @KxGyGEGFGzGAGGGHGSH%GTH[K]K^K_K`K{K|K}K~KaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLFcGcHcIcZL0L1L2L3L4L5L6L7LJdu p 8L9LKdUHv Jc!LjfkfBe#L$L%LVHlf'L(L)L*L+L,L-L.LKcLcFbMcNcOcPcQcRcSc/L:L;L=L?L@L[L]LIG^L_L`L{LCeDee EeFe|L}LWHvdXH~LaMbMcMdMeMfMgMhMwdiMjMkMlMYHZH0H9fmMnMoMpMqMrMsMtMuMvMwMxMuIvIyMzMAMwIxdxIrcBMscCMyIDMzIEMAIGeBICIDIFMEIMdFIGIHIIIJIKILIMINIOIPIQIRISIGMHMIMJMKMLMTIBGUIVI8 /g!f#fyd$f%f'f(f)f*f+f,f-f.f/f:f;f9e!e=f?f@f[f]fWI^f_f`f{f|fXI}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgMM6czdd NM7cOM8cAdBdb 9cPM!cQM#cRM$cSM%cTM'cUM(cVM)cWM*cXM+cYM,cZM-cYI.cZI/c0M:c1M;c2M=c3M?c4M@c5M[c6M]c7M^c8M_c9M`c!M{c#M|c$M}cJg~c%Mad'Mbd(Mcd)M*M+Mdd0Ied,MfdHeIeJeKe-M.M/M:M;M=M?Mjc5bQbRbSb6bTbUbkcTcUcVc9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Iblc7bVbWbXb8bYbZbmcWcXcYc@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbnc9b0b1b2b!b3b4bocZc0c1cibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbObLe@M[M]M^M_M`M1H{Mof2H|M}MMeNe~MaNbNcNOe3H4HdNeN5H6H7H8H'GfN9HgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwN!HxN#HyN$HzN%HAN'HBN(HCN)HDN*HENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVN+HWNXN,HYNZN:bPeQe0N1N2N2c-H3N4N5N6N7N8N3c9N!N#N$N%NRe'NGg(N)NpfSe.H/H:HHgIg;H*NTew UeVeqfWeXe+N,N-N.NYe/N(G:N=H;N=Nrfgd?N@N[Nsf]N^N_N`N{NCd|Nx }N~NaObOcOdOeOfOgOhOtfiOjOkOlONdOdPdmOnOoOQdRdSdtcucpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O-g0e1eudde[O]O^O_O`O^h{O|O}O~O_haPbPcPdPePfP{hgPhPiPjP|hkPlPmP~hnPoPpPqPairPsPPbtPuP?H@HvPwPxPciyPzPAPBPdiCPDPEPFPGPHPfiIPJPKPLPgiMPNPOPiiPPQPRPSPjiTPUPVPliWPXPYPZPmi0P1P2Poi3P4P5P6Ppi7P8P9Pri!P#P$P%Psi'P(P)Pui*P+P,P-Pvi.P/P:P;Pxi=P?P@P[Pyi]P^P_P`P{P|PTdUd1IVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtdc ,d-d.d/d:d;d=d?d}P~P;baQbQ4ccQdQeQfQgQhQiQjQkQlQmQnQoQpQqQ2I3IrQsQtQuQvQwQ@dxQyQzQAQ4I[HBQ[dCQDQEQFQGQHQ#bIQJQKQLQMQa ]d^d_d`d{d|d}d~dNQOQPQQQaeRQbeceSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q5I9Q!Q#Q$Q]H%Q'Q(Q)Q*Q+Q,Q-Q.Qufvf/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q)G^H|Q*G_H`H}Q{H|H~QaRbRcR}HdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRGHvR~HwRaIxRyRCGzR5cARwfBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(RZe)R*R+R

255 if keep_none: 26I7I8Iwc9Ixc#e!I#I$IyczcAc%I'IDf(I)I*I+I,I-Iy EfFfz DdA Gf.I/IHfIfeeJf:IKfLf;I=IMfq Bcfe?INfOfPfqe@IgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 [I]I^I_I`I{I|I}I~IQfaJbJcJRfSfTfUfVf4G5G6G7G8G9G!G#GdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJEdresJtJuJvJCcJHBJCJDJEJFJGJhHcIKHk f WfAbXfIJJJKJ=b?b/bLJ@bLH[b]b^bMJNJ_bOJPJheiejekele1 DcdIeIfIgIhIiI`b{bjIkIlIQJRJSJg h i j 2 3 4 5 BbCbDbTJUJVJWJXJYJZJme0J1J2J3J4J$b%b'bjHkHlHTnVn5J6J7J8J9J@g!J#J$J%J'J(b)b*brHsHtHioko(JEc)J*J+J,J+b,b-buHvHwHzoBo-Jne[g]gJoEb|b}b~bl .J/J:J;J6 oepe=J4f5f6f7fr 8f7 $GacoIMGteNGFd?JGd@JOGpIAH[J]JqI^JrIPGbcsIHdQGueRGcc_Jdc`Jec{JIdveSGweTGxeUGyeVGWGXGYGZG0G1G2G3GBH|JCH}J~JaKbKcKfcdKeKfKgcgKhchKiciKjKDHkKEHlKmKFHnKoKpKqKrKsKtKuKvKwKxK,eyKzKtIAK-eBKCKDK.eEKFKGK/eHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKzeXK;Km n o xGyGEGFGzGAGGGHGSH%GTHVH;L=L?L@L[L]L^L_L`L{LCee |L}LWHvdXHaMcMdMeMfMgMhMwdiMjMkMlMYHZH0H9fmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMxdrcscEMGeFMMd8 yd9e!ezdd AdBdHeIeJeKe-M.M/M:M;M=M?Mjc5bQbRbSb6bTbUbkcTcUcVc9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Iblc7bVbWbXb8bYbZbmcWcXcYc@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbnc9b0b1b2b!b3b4bocZc0c1cibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbObLe@M[M]M^M_M`M1H2H|MMeNe~MaNbNcNOe3H4HdNeN5H6H7H8H'GfN9HgN!HxN#HyN$HzN%HAN'HBN(HCN)HDN*HEN+H,H:bPeQe0N1N2N-H3c9N!N#NGg.H/H:HHgIg;H(G=H?N@N[Nsf]N^N_N`N{NCd|Nx }N~NaObOcOdOeOfOgOhOtfiOjOkOlOQdRdSdtcucpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@Oud[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPPb?H@HvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P|PUdc ,d}P~P;baQ4crQsQtQwQxQyQzQAQ[H[d#ba TQUQXQYQZQ0Q4Q5Q6Q7Q#Q]H%Q)Q*Q,Q-Q.Qufvf)G^H*G_H`H{H|H}HdReRfRgRhRiRkRlRmRnRoRrRGH~HaI5cwfBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(RZe)R*R+R

256 return options 2qJvJcIk f IJJJKJ=b?b/bLJ@b[b]b^bMJNJ_bdIeIfIgIhIiI`b{bjIkIlIg h i j 2 3 4 5 @g[g]gEb|b}b~b$GoIMGNGFdGdOGpIAHqIrIPGsIHdQGRGccdcecIdSGTGUGVGWGXGYGZG0G1G2G3GBHCHfcgchcictKvKwK,ezKtI-eCK.eFK/eIKKKMKOKQKSKUKWKXK;KVH^L_Lxdrcsczdd AdBd=M?M]M^M_M`M2H|MOe3H4HdNeN5H6H7H8H'GfN9HgN!HxN#HyN$HzN%HAN'HBN(HCN)HDN*HEN+H,H0N1N2N(GCdtcuc[O`OcPfPmPPbxPHPOPVP2P9P)P;P,Q-Q.Qufvf)G*GdReRfRgRhRiRkRlRmRnRoRrR~HaIwfBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(RZe)R*R+R

257 return cls() 26I7I8Iwc9Ixc#e!I#I$IyczcAc%I'IDf(I)I*I+I,I-Iy EfFfz DdA Gf.I/IHfIfeeJf:IKfLf;I=IMfq Bcfe?INfOfPfqe@IgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 [I]I^I_I`I{I|I}I~IQfaJbJcJRfSfTfUfVf4G5G6G7G8G9G!G#GdJeJfJgJhJiJjJkJlJmJnJoJpJrJEdresJtJuJCcJHBJCJDJEJFJGJhHcIKHk f WfAbXf=b?b/b@bLH[b]b^b_bOJPJheiejekele1 DcdIeIfIgIhIiI`b{bjIkIlIQJRJSJg h i j 2 3 4 5 BbCbDbTJUJVJWJXJYJZJme0J1J2J3J4J$b%b'bjHkHlHTnVn5J6J7J8J9J@g!J#J$J%J'J(b)b*brHsHtHioko(JEc)J*J+J,J+b,b-buHvHwHzoBo-Jne[g]gJoEb|b}b~bl .J/J:J;J6 oepe=J4f5f6f7fr 8f7 acoIMGteNGFd?JGd@JOGpI[J]JqI^JrIPGbcsIHdQGueRG_J`J{JIdveSGweTGxeUGyeVGWGXGYGZG0G1G2G3G|J}J~JaKbKcKdKeKfKgKhKiKjKDHkKEHlKmKFHnKoKpKqKrKsKuKxKyKtIAKBKDKEKGKHKJKLKNKPKRKTKVKzem n o xGyGEGFGzGAGGGHGSH%GTH;L=L?L@L[L]L`L{LCee |L}LWHvdXHaMcMdMeMfMgMhMwdiMjMkMlMYHZH0H9fmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMxdrcscEMGeFMMd8 yd9e!ezdd AdBdHeIeJeKe-M.M/M:M;Mjc5bQbRbSb6bTbUbkcTcUcVc9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Iblc7bVbWbXb8bYbZbmcWcXcYc@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbnc9b0b1b2b!b3b4bocZc0c1cibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbObLe@M[M1HMeNe~MaNbNcN'G:bPeQe-H3c9N!N#NGg.H/H:HHgIg;H(G=H?N@N[Nsf]N^N_N`N{NCd|Nx }N~NaObOcOdOeOfOgOhOtfiOjOkOlOQdRdSdtcucpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@Oud]O^O_O{O|O}O~OaPbPdPePgPhPiPjPkPlPnPoPpPqPrPsPPb?H@HvPwPyPzPAPBPCPDPEPFPGPIPJPKPLPMPNPPPQPRPSPTPUPWPXPYPZP0P1P3P4P5P6P7P8P!P#P$P%P'P(P*P+P,P-P.P/P:P=P?P@P[P]P^P_P|PUdc ,d}P~P;baQ4crQsQtQwQxQyQzQAQ[H[d#ba TQUQXQYQZQ0Q4Q5Q6Q7Q#Q]H%Q)Q*Q)G^H*G_H`H{H|H}HGH5cZe

258 elif isinstance(options, cls): 2Dfy EfFfz A GfHfIfeeJfKfLfMfq feNfOfPfgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 QfRfSfTfUfVfVhWhXh2eZh3e1h4e2h5e3h6e4h7e5h6h7h8h9h!h#h$h%h'hwJxJyJCcJHzJAJKHk f HJ(hWfAbXfLH)hheiejekele1 g h i j 2 3 4 5 BbCbDbme$b%b'bYfZf0f1f2f3f*h+h,h-h.h/h:h(b)b*b;h+b,b-bne.b=hl 6 oepe4f5f6f7fr 8f7 mI$GnIYKZK0K1K2K3K4KMH5KNH6K7K8K9K!K#K$K%KOH'KPH(KQH)KRH*K+K,KAe-K.K/K:Km =Kn ?Ko @KxGyGEGFGzGAGGGHGSH%GTH[K]K^K_K`K{K|K}K~KaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLFcGcHcIcZL0L1L2L3L4L5L6L7LJdu p 8L9LKdUHv Jc!LjfkfBe#L$L%LVHlf'L(L)L*L+L,L-L.LKcLcFbMcNcOcPcQcRcSc/L:LIGDeEeFeWHvdXH~LbMwdYHZH0H9fuIvIwIxdxIrcBMscCMyIDMzIAIBICIDIEIMdFIGIHIIIJIKILIMINIOIPIQIRISIGMHMIMJMKMLMTIBGUIVI8 /g!f#fyd$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]fWI^f_f`f{f|fXI}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgMM6czdd NM7cOM8cAdBdb 9cPM!cQM#cRM$cSM%cTM'cUM(cVM)cWM*cXM+cYM,cZM-cYI.cZI/c0M:c1M;c2M=c3M?c4M@c5M[c6M]c7M^c8M_c9M`c!M{c#M|c$M}cJg~c%Mad'Mbd(Mcd)M*M+Mdd0Ied,Mfd1H{Mof2H}M3H4H5H6H7H8H'G9HhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwN!H#H$H%H'H(H)H*HFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVN+HWNXN,HYNZN:b2c-H3N4N5N6N7N8N3c$N%NRe'NGg(N)NpfSe.H/H:HHgIg;H*NTew UeVeqfWeXe+N,N-N.NYe/N(G:N=H;N=NrfgdCdNdOdPdmOnOoOtcuc-g0e1eudde^h_h{h|h~haiPbtPuP?H@Hcidifigiiijilimioipirisiuivixiyi`P{PTd1IVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtd-d.d/d:d;d=d?dbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQ2I3IuQvQ@d4I[HBQCQDQEQFQGQHQIQJQKQLQMQa ]d^d_d`d{d|d}d~dNQOQPQQQaeRQbeceSQVQWQ1Q2Q3Q8Q5I9Q!Q$Q]H'Q(Q+Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q)G^H|Q*G_H`H}Q{H|H~QaRbRcR}HjRpRqRsRtRuRvR~HwRaIxRyRCGzR5cAR

259 return options 2Dfy EfFfz A GfHfIfeeJfKfLfMfq feNfOfPfgeB C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 QfRfSfTfUfVfVhWhXh2eZh3e1h4e2h5e3h6e4h7e5h6h7h8h9h!h#h$h%h'hwJxJyJCcJHzJAJKHk f HJ(hWfAbXfLH)hheiejekele1 g h i j 2 3 4 5 BbCbDbme$b%b'bYfZf0f1f2f3f*h+h,h-h.h/h:h(b)b*b;h+b,b-bne.b=hl 6 oepe4f5f6f7fr 8f7 YKZK0K1K2K3K4KMH5KNH6K7K8K9K!K#K$K%KOH'KPH(KQH)KRH*K+K,KAe-K.K/K:Km =Kn ?Ko @KEGFGGGHGSHTH[K]K^K_K`K{K|K}K~KaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLFcGcHcIcZL0L1L2L3L4L5L6L7LJdu p 8L9LKdUHv Jc!LjfkfBe#L$L%LVHlf'L(L)L*L+L,L-L.LKcLcFbMcNcOcPcQcRcSc/L:LDeEeFeWHvdXH~LbMwdYHZH0H9fuIvIwIxdxIrcBMscCMyIDMzIAIBICIDIEIMdFIGIHIIIJIKILIMINIOIPIQIRISIGMHMIMJMKMLMTIBGUIVI8 /g!f#fyd$f%f'f(f)f*f+f,f-f.f/f:f;f=f?f@f[f]fWI^f_f`f{f|fXI}f~fagbgcgdgegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgDgEgFgMM6czdd NM7cOM8cAdBdb 9cPM!cQM#cRM$cSM%cTM'cUM(cVM)cWM*cXM+cYM,cZM-cYI.cZI/c0M:c1M;c2M=c3M?c4M@c5M[c6M]c7M^c8M_c9M`c!M{c#M|c$M}cJg~c%Mad'Mbd(Mcd)M*M+Mdd0Ied,Mfd1H{Mof2H}M3H4H5H6H7H8H'G9HhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwN!H#H$H%H'H(H)H*HFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVN+HWNXN,HYNZN:b2c-H3N4N5N6N7N8N3c$N%NRe'NGg(N)NpfSe.H/H:HHgIg;H*NTew UeVeqfWeXe+N,N-N.NYe/N(G:N=H;N=NrfgdCdNdOdPdmOnOoOtcuc-g0e1eudde^h_h{h|h~haiPbtPuP?H@Hcidifigiiijilimioipirisiuivixiyi`P{PTd1IVdWdXdYdZdhdidjd0d1d2d3dpcqckd4dld5d6d7d8dmd9dndodpdqd!d#d$d%d'd(d)d*d+drdsdtd-d.d/d:d;d=d?dbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQ2I3IuQvQ@d4I[HBQCQDQEQFQGQHQIQJQKQLQMQa ]d^d_d`d{d|d}d~dNQOQPQQQaeRQbeceSQVQWQ1Q2Q3Q8Q9Q!Q$Q]H'Q(Q+Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q)G^H|Q*G_H`H}Q{H|H~QaRbRcR}HjRpRqRsRtRuRvR~HwRaIxRyRCGzR5cAR

260 elif isinstance(options, dict): 2mI$GnIxGyGzGAG%GIGBG5ICG

261 return cls(**options) 2mI$GnIxGyGzGAG%G5I

262 else: 

263 raise TypeError( 2IGBGCG

264 f"The {options_description} must be provided as an object " 2IGBGCG

265 f"of type {cls.__name__} or as a dict with valid {options_description}. " 2IGBGCG

266 f"The provided object is '{options}'." 2IGBGCG

267 ) 

268  

269  

270def _handle_boolean_option(option: bool) -> str: 

271 """ 

272 Convert a boolean option to a string representation. 

273 """ 

274 return "true" if bool(option) else "false" 26cd 7c8cb 9c!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~cadbdcddd0Iedfdgdtcuchdidjdldpdqdrdsdtd8S

275  

276  

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

278 """ 

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

280  

281 Args: 

282 checker: The function to call to check whether the preconditions are met. It has 

283 the same signature as the wrapped function with the addition of the keyword argument `what`. 

284 what: A string that is passed in to `checker` to provide context information. 

285  

286 Returns: 

287 Callable: A decorator that creates the wrapping. 

288 """ 

289  

290 def outer(wrapped_function: Callable) -> Callable: 2JG

291 """ 

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

293 """ 

294  

295 @functools.wraps(wrapped_function) 2JG

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

297 """ 

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

299 """ 

300 checker(*args, **kwargs, what=what) 2JG

301 result = wrapped_function(*args, **kwargs) 2JG

302  

303 return result 2JG

304  

305 return inner 2JG

306  

307 return outer 2JG

308  

309  

310def is_sequence(obj: object) -> bool: 

311 """ 

312 Check if the given object is a sequence (list or tuple). 

313 """ 

314 return isinstance(obj, Sequence) 2m n o vdwduIvIwIxIrcscyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVI8 /gWIXIYIZI1Ipcqckdmdndod9S!S#S$S%S'S2I3I(S)S*StSuSvS4IxfyfzfAfBfCf+S,S-S.S

315  

316  

317def is_nested_sequence(obj: object) -> bool: 

318 """ 

319 Check if the given object is a nested sequence (list or tuple with atleast one list or tuple element). 

320 """ 

321 return is_sequence(obj) and any(is_sequence(elem) for elem in obj) 2pcqctSuSvS

322  

323  

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

325_fork_warning_checked = False 

326  

327  

328def reset_fork_warning() -> None: 

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

330  

331 This function is intended for use in tests to allow multiple test runs 

332 to check the warning behavior. 

333 """ 

334 global _fork_warning_checked 

335 _fork_warning_checked = False 2-g0e1eud.gde

336  

337  

338cdef inline tuple _read_fill_ptr(const char* ptr, Py_ssize_t width): 

339 """Extract (value, element_size) from a raw pointer of known width.""" 

340 cdef unsigned int val 

341 if width == 1: 2+G,G-G.G/G:G;G=G?G@G[G]GbI1 5bQbRbSb6bTbUb9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Ib7bVbWbXb8bYbZb@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLb9b0b1b2b!b3b4bibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbOb

342 val = (<uint8_t*>ptr)[0] 2Qb! # $ , - Vb[ ] ^ abbb0bjbkblbsbtb

343 elif width == 2: 

344 val = (<uint16_t*>ptr)[0] 2+G-G/G;G?G[GRbSb% ' ( . / : WbXb_ ` { cbdbeb1b2bmbnbobubvbwb

345 elif width == 4: 

346 val = (<uint32_t*>ptr)[0] 2,G.G:G=G@G]G1 TbUb9 ) * + ; = ? YbZb@ | } ~ fbgbhb3b4bibpbqbrbxbybzb

347 else: 

348 raise ValueError(f"value must be 1, 2, or 4 bytes, got {width}") 2bI5b6bGbHbIb7b8bJbKbLb9b!bMbNbOb

349 return (val, <unsigned int>width) 2+G,G-G.G/G:G;G=G?G@G[G]G1 QbRbSbTbUb9 ! # $ % ' ( ) * + , - . / : ; = ? VbWbXbYbZb@ [ ] ^ _ ` { | } ~ abbbcbdbebfbgbhb0b1b2b3b4bibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzb

350  

351  

352cpdef tuple _parse_fill_value(value): 

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

354  

355 Parameters 

356 ---------- 

357 value : int or buffer-protocol object 

358 - int: Must be in range [0, 256). Treated as 1-byte fill. 

359 - bytes or buffer-protocol: Must be 1, 2, or 4 bytes. 

360  

361 Returns 

362 ------- 

363 tuple of (int, int) 

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

365  

366 Raises 

367 ------ 

368 OverflowError 

369 If int value is outside [0, 256). 

370 TypeError 

371 If value is not an int and does not support the buffer protocol. 

372 ValueError 

373 If value byte length is not 1, 2, or 4. 

374 """ 

375 cdef uint8_t byte_val 

376 cdef Py_buffer buf 

377  

378 if isinstance(value, int): 24G5G6G7G8G9G!G#G,R-R+G,G.R/R-G.G:R;R/G:G=R?R;G=G@R[R?G@G]R^R[G]GbIk f =b?b/b@b[b]b^b_b1 iHg h i j TnVnmHnHoHpH@gqHiokozoBo[g]gJoEb|b}b~bxHyHacsezHbcccdcecfcgchcicnfjc5bQbRbSb6bTbUbkcTcUcVc9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Iblc7bVbWbXb8bYbZbmcWcXcYc@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbnc9b0b1b2b!b3b4bocZc0c1cibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbOb_R`R{RPb|R}R~RaSbScSdSeS

379 byte_val = value 24G5G6G7G8G9G!G#G,R-R.R/R:R;R=R?R@R[R]R^Rk f =b?b/b@b[b]b^b_biHg h i j TnVnmHnHoHpH@gqHiokozoBo[g]gJoEb|b}b~bxHyHacsezHbcccdcecfcgchcicnfkcTcUcVcmcWcXcYcocZc0c1c_R`R{RPb|R}R~RaSbScSdSeS

380 return (<unsigned int>byte_val, <unsigned int>1) 24G5G6G7G8G9G!G#G,R-R.R/R:R;R=R?R@R[R]R^Rk f =b?b/b@b[b]b^b_biHg h i j TnVnmHnHoHpH@gqHiokozoBo[g]gJoEb|b}b~bxHyHacsezHbcccdcecfcgchcicnfkcmcoc_R`R{RPb|R}R~RaSbScSdSeS

381  

382 if isinstance(value, bytes): 2+G,G-G.G/G:G;G=G?G@G[G]GbI1 jc5bQbRbSb6bTbUb9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Iblc7bVbWbXb8bYbZb@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbnc9b0b1b2b!b3b4bibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbOb

383 return _read_fill_ptr(<const char*><bytes>value, <Py_ssize_t>len(value)) 2+G,G-G.G/G:G;G=G?G@G[G]GbI5bQbRbSb6bTbUb7bVbWbXb8bYbZb9b0b1b2b!b3b4b

384  

385 if PyObject_GetBuffer(value, &buf, PyBUF_SIMPLE) != 0: 21 jc9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Iblc@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbncibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbOb

386 raise TypeError( 

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

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

389 ) 

390 try: 21 9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Ib@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbOb

391 return _read_fill_ptr(<const char*>buf.buf, buf.len) 21 9 Gb! # $ % ' ( ) * + Hb, - . / : ; = ? Ib@ Jb[ ] ^ _ ` { | } ~ KbabbbcbdbebfbgbhbLbibMbjbkblbmbnbobpbqbrbNbsbtbubvbwbxbybzbOb

392 finally: 

393 PyBuffer_Release(&buf) 

394  

395  

396def check_multiprocessing_start_method() -> None: 

397 """Check if multiprocessing start method is 'fork' and warn if so.""" 

398 global _fork_warning_checked 

399 if _fork_warning_checked: 2wSxSMHNHySzSASBSCSDSOHPHQHRHm n o xGyGEGFGzGAGGGHGESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S:e;e=e?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcafbfcfdfefffgfhfifJdKdUHJcKcLcFbMcNcOcPcQcRcSc-g0e1eud.gde

400 return 2wSxSMHNHySzSASBSCSDSOHPHQHRHm n o xGyGEGFGzGAGGGHGESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S:e;e=e?e@e[e]e^e_e`e{e|e}e~eFcGcHcIcafbfcfdfefffgfhfifJdKdUHJcKcLcFbMcNcOcPcQcRcScde

401 _fork_warning_checked = True 2Fb-g0e1eud.gde

402  

403 # Common warning message parts 

404 common_message = ( 

405 "CUDA does not support. Forked subprocesses exhibit undefined behavior, " 2Fb-g0e1eud.gde

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

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

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

409 ) 

410  

411 try: 2Fb-g0e1eud.gde

412 start_method = multiprocessing.get_start_method() 2Fb-g0e1eud.gde

413 if start_method == "fork": 2Fb-g0e1eudde

414 message = f"multiprocessing start method is 'fork', which {common_message}" 20e1eudde

415 warnings.warn(message, UserWarning, stacklevel=3) 20e1eudde

416 except RuntimeError: 2.g

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

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

419 if platform.system() == "Linux": 2.g

420 message = ( 

421 f"multiprocessing start method is not set and defaults to 'fork' on Linux, " 2.g

422 f"which {common_message}" 

423 ) 

424 warnings.warn(message, UserWarning, stacklevel=3) 2.g