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
« 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
5import functools
6import multiprocessing
7import platform
8import warnings
9from collections.abc import Sequence
10from typing import Any, Callable, NamedTuple
12from cuda.bindings import driver as driver, nvrtc as nvrtc, runtime as runtime
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'
22from cuda.bindings.nvvm import nvvmError
23from cuda.bindings.nvjitlink import nvJitLinkError
25from cpython.buffer cimport PyObject_GetBuffer, PyBuffer_Release, Py_buffer, PyBUF_SIMPLE
27from cuda.bindings cimport cynvrtc, cynvvm, cynvjitlink
28from cuda.core._rt cimport (
29 register_warning_category,
30 take_last_error_detail,
31)
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
37class CUDAError(Exception):
38 """Raised when a CUDA driver or runtime call fails.
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 """
48class CUDAWarning(RuntimeWarning):
49 """Warning issued when ``cuda.core`` hits a CUDA error it cannot raise.
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.
58 Filter on this category to make such failures fatal in tests::
60 warnings.filterwarnings("error", category=cuda.core.CUDAWarning)
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``).
66 .. versionadded:: 1.3.0
67 """
70# Route the C++ handle layer's non-propagating reports through this category.
71register_warning_category(<PyObject*>CUDAWarning)
74class NVRTCError(CUDAError):
75 """Raised when an NVRTC call fails; the compiler log is appended when available."""
79class ComputeCapability(NamedTuple):
80 """A named tuple of (major, minor) CUDA compute capability version numbers."""
81 major: int
82 minor: int
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
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
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
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
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
165cdef object _RUNTIME_SUCCESS = runtime.cudaError_t.cudaSuccess
166cdef object _NVRTC_SUCCESS = nvrtc.nvrtcResult.NVRTC_SUCCESS
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
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
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
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
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}")
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
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 )
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
277def precondition(checker: Callable[..., None], str what="") -> Callable[..., Any]:
278 """
279 A decorator that adds checks to ensure any preconditions are met.
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.
286 Returns:
287 Callable: A decorator that creates the wrapping.
288 """
290 def outer(wrapped_function: Callable) -> Callable: 2JG
291 """
292 A decorator that actually wraps the function for checking preconditions.
293 """
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
303 return result 2JG
305 return inner 2JG
307 return outer 2JG
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
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
324# Track whether we've already warned about fork method
325_fork_warning_checked = False
328def reset_fork_warning() -> None:
329 """Reset the fork warning check flag for testing purposes.
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
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
352cpdef tuple _parse_fill_value(value):
353 """Parse a fill/memset value into (raw_value, element_size).
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.
361 Returns
362 -------
363 tuple of (int, int)
364 (raw_value, element_size) where element_size is 1, 2, or 4.
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
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
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
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)
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
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 )
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