Coverage for cuda/core/_device.pyx: 92.76%
456 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-13 01:38 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-13 01:38 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN
11from libcpp.vector cimport vector
13import threading
15from cuda.core._context cimport Context
16from cuda.core._context import ContextOptions
17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource
18from cuda.core._event cimport Event as cyEvent
19from cuda.core._event import Event, EventOptions
20from cuda.core._memory._buffer cimport Buffer, MemoryResource
21from cuda.core._resource_handles cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 get_primary_context,
27 get_last_error,
28 as_cu,
29)
31from cuda.core._stream import IsStreamType, Stream
32from cuda.core._utils.clear_error_support import assert_type
33from cuda.core._utils.cuda_utils import (
34 ComputeCapability,
35 CUDAError,
36 driver,
37 handle_return,
38 runtime,
39)
40from cuda.core._stream cimport default_stream
42from typing import TYPE_CHECKING
44if TYPE_CHECKING:
45 import cuda.core.system # no-cython-lint
46 from cuda.core.graph import GraphBuilder
48# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
49# but it seems it is very convenient to expose them for testing purposes...
50_tls = threading.local()
51_lock = threading.Lock()
52cdef bint _is_cuInit = False
55cdef class DeviceProperties:
56 """
57 A class to query various attributes of a CUDA device.
59 Attributes are read-only and provide information about the device.
60 """
61 cdef:
62 int _handle
63 dict _cache
65 def __init__(self, *args, **kwargs) -> None:
66 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2UF
68 @classmethod
69 def _init(cls, handle: int) -> DeviceProperties:
70 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m5h.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfk Q (et l R kkSklk%j#jmknkokpkqkrksktkuk'jG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m:k;kflVl8hAlWl9hXl!hYl#hZl$h7g0l9m1l1w!m2w3w4w#m5w6w$m7w%m%h2l'h(h'm)h(m*h3l8g+h)m*mBl4l5lKp3eTk9g6l8wgl9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkoHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
71 self._handle = handle 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m5h.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfk Q (et l R kkSklk%j#jmknkokpkqkrksktkuk'jG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m:k;kflVl8hAlWl9hXl!hYl#hZl$h7g0l9m1l1w!m2w3w4w#m5w6w$m7w%m%h2l'h(h'm)h(m*h3l8g+h)m*mBl4l5lKp3eTk9g6l8wgl9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkoHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
72 self._cache = {} 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m5h.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfk Q (et l R kkSklk%j#jmknkokpkqkrksktkuk'jG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m:k;kflVl8hAlWl9hXl!hYl#hZl$h7g0l9m1l1w!m2w3w4w#m5w6w$m7w%m%h2l'h(h'm)h(m*h3l8g+h)m*mBl4l5lKp3eTk9g6l8wgl9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkoHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
73 return self 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m5h.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfk Q (et l R kkSklk%j#jmknkokpkqkrksktkuk'jG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m:k;kflVl8hAlWl9hXl!hYl#hZl$h7g0l9m1l1w!m2w3w4w#m5w6w$m7w%m%h2l'h(h'm)h(m*h3l8g+h)m*mBl4l5lKp3eTk9g6l8wgl9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkoHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
75 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
76 """Retrieve the attribute value directly from the driver."""
77 cdef int val
78 cdef cydriver.CUresult err
79 with nogil: 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m7l5hjl.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdfk !g#wIkQ zkJk(et KkAkLkl R Mp5pkk5x6x7x|w$w}wyz8x9xSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l9m?y1l1w!m2wfw3wgw4w#m5w6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
80 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m7l5hjl.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdfk !g#wIkQ zkJk(et KkAkLkl R Mp5pkk5x6x7x|w$w}wyz8x9xSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l9m?y1l1w!m2wfw3wgw4w#m5w6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
81 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m7l5hjl.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdfk !g#wIkQ zkJk(et KkAkLkl R Mp5pkk5x6x7x|w$w}wyz8x9xSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l9m?y1l1w!m2wfw3wgw4w#m5w6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
82 return <int>default
83 HANDLE_RETURN(err) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m7l5hjl.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdfk !g#wIkQ zkJk(et KkAkLkl R Mp5pkk5x6x7x|w$w}wyz8x9xSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l9m?y1l1w!m2wfw3wgw4w#m5w6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
84 return val 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m7l5hjl.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdfk !g#wIkQ zkJk(et KkAkLkl R Mp5pkk5x6x7x|w$w}wyz8x9xSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l9m?y1l1w!m2wfw3wgw4w#m5w6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
86 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
87 """Retrieve the attribute value, using cache if applicable."""
88 if attr not in self._cache: 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2mCzDzEzFzGzHzIz7l5hJzKzLzMzNzjlOzPzQzRzSzTzUzVzWzXzYz.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf7p9l8p!l9p#l!pk #p#wIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEwMp5pkk5x6x7x|w$w}w8x9x^z~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;x=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$jFwGwZzHw,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiMxZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
89 self._cache[attr] = self._get_attribute(attr, default) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m7l5hjl.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdfk #wIkQ zkJk(et KkAkLkl R Mp5pkk5x6x7x|w$w}w8x9x~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;x=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l9m?y1l1w!m2wfw3wgw4w#m5w6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
90 return self._cache[attr] 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2mCzDzEzFzGzHzIz7l5hJzKzLzMzNzjlOzPzQzRzSzTzUzVzWzXzYz.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf7p9l8p!l9p#l!pk #p#wIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEwMp5pkk5x6x7x|w$w}w8x9x^z~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;x=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)AvkklIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b~bac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$jFwGwZzHw,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiMxZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
92 @property
93 def max_threads_per_block(self) -> int:
94 """int: Maximum number of threads per block."""
95 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2okFxGxHxIxJxKxIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkz
97 @property
98 def max_block_dim_x(self) -> int:
99 """int: Maximum block dimension X."""
100 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2]x
102 @property
103 def max_block_dim_y(self) -> int:
104 """int: Maximum block dimension Y."""
105 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2nk
107 @property
108 def max_block_dim_z(self) -> int:
109 """int: Maximum block dimension Z."""
110 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2^x
112 @property
113 def max_grid_dim_x(self) -> int:
114 """int: Maximum grid dimension X."""
115 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2a `xkl
117 @property
118 def max_grid_dim_y(self) -> int:
119 """int: Maximum grid dimension Y."""
120 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2{x
122 @property
123 def max_grid_dim_z(self) -> int:
124 """int: Maximum grid dimension Z."""
125 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2|x
127 @property
128 def max_shared_memory_per_block(self) -> int:
129 """int: Maximum shared memory available per block in bytes."""
130 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2byFxGxHxIxJxKxIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkz
132 @property
133 def total_constant_memory(self) -> int:
134 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
135 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2Py
137 @property
138 def warp_size(self) -> int:
139 """int: Warp size in threads."""
140 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2Ty
142 @property
143 def max_pitch(self) -> int:
144 """int: Maximum pitch in bytes allowed by memory copies."""
145 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2~x
147 @property
148 def maximum_texture1d_width(self) -> int:
149 """int: Maximum 1D texture width."""
150 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2my
152 @property
153 def maximum_texture1d_linear_width(self) -> int:
154 """int: Maximum width for a 1D texture bound to linear memory."""
155 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2ly
157 @property
158 def maximum_texture1d_mipmapped_width(self) -> int:
159 """int: Maximum mipmapped 1D texture width."""
160 return self._get_cached_attribute( 2rx
161 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2rx
162 )
164 @property
165 def maximum_texture2d_width(self) -> int:
166 """int: Maximum 2D texture width."""
167 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2sy
169 @property
170 def maximum_texture2d_height(self) -> int:
171 """int: Maximum 2D texture height."""
172 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2oy
174 @property
175 def maximum_texture2d_linear_width(self) -> int:
176 """int: Maximum width for a 2D texture bound to linear memory."""
177 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2ry
179 @property
180 def maximum_texture2d_linear_height(self) -> int:
181 """int: Maximum height for a 2D texture bound to linear memory."""
182 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2sk
184 @property
185 def maximum_texture2d_linear_pitch(self) -> int:
186 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
187 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2qy
189 @property
190 def maximum_texture2d_mipmapped_width(self) -> int:
191 """int: Maximum mipmapped 2D texture width."""
192 return self._get_cached_attribute( 2vx
193 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2vx
194 )
196 @property
197 def maximum_texture2d_mipmapped_height(self) -> int:
198 """int: Maximum mipmapped 2D texture height."""
199 return self._get_cached_attribute( 2ux
200 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2ux
201 )
203 @property
204 def maximum_texture3d_width(self) -> int:
205 """int: Maximum 3D texture width."""
206 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2vy
208 @property
209 def maximum_texture3d_height(self) -> int:
210 """int: Maximum 3D texture height."""
211 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2uy
213 @property
214 def maximum_texture3d_depth(self) -> int:
215 """int: Maximum 3D texture depth."""
216 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2ty
218 @property
219 def maximum_texture3d_width_alternate(self) -> int:
220 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
221 return self._get_cached_attribute( 2yx
222 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2yx
223 )
225 @property
226 def maximum_texture3d_height_alternate(self) -> int:
227 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
228 return self._get_cached_attribute( 2xx
229 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2xx
230 )
232 @property
233 def maximum_texture3d_depth_alternate(self) -> int:
234 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
235 return self._get_cached_attribute( 2wx
236 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2wx
237 )
239 @property
240 def maximum_texturecubemap_width(self) -> int:
241 """int: Maximum cubemap texture width or height."""
242 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2wy
244 @property
245 def maximum_texture1d_layered_width(self) -> int:
246 """int: Maximum 1D layered texture width."""
247 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2qk
249 @property
250 def maximum_texture1d_layered_layers(self) -> int:
251 """int: Maximum layers in a 1D layered texture."""
252 return self._get_cached_attribute( 2qx
253 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2qx
254 )
256 @property
257 def maximum_texture2d_layered_width(self) -> int:
258 """int: Maximum 2D layered texture width."""
259 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2py
261 @property
262 def maximum_texture2d_layered_height(self) -> int:
263 """int: Maximum 2D layered texture height."""
264 return self._get_cached_attribute( 2sx
265 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2sx
266 )
268 @property
269 def maximum_texture2d_layered_layers(self) -> int:
270 """int: Maximum layers in a 2D layered texture."""
271 return self._get_cached_attribute( 2tx
272 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2tx
273 )
275 @property
276 def maximum_texturecubemap_layered_width(self) -> int:
277 """int: Maximum cubemap layered texture width or height."""
278 return self._get_cached_attribute( 2Ax
279 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2Ax
280 )
282 @property
283 def maximum_texturecubemap_layered_layers(self) -> int:
284 """int: Maximum layers in a cubemap layered texture."""
285 return self._get_cached_attribute( 2zx
286 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2zx
287 )
289 @property
290 def maximum_surface1d_width(self) -> int:
291 """int: Maximum 1D surface width."""
292 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2dy
294 @property
295 def maximum_surface2d_width(self) -> int:
296 """int: Maximum 2D surface width."""
297 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2gy
299 @property
300 def maximum_surface2d_height(self) -> int:
301 """int: Maximum 2D surface height."""
302 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2ey
304 @property
305 def maximum_surface3d_width(self) -> int:
306 """int: Maximum 3D surface width."""
307 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2jy
309 @property
310 def maximum_surface3d_height(self) -> int:
311 """int: Maximum 3D surface height."""
312 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2iy
314 @property
315 def maximum_surface3d_depth(self) -> int:
316 """int: Maximum 3D surface depth."""
317 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2hy
319 @property
320 def maximum_surface1d_layered_width(self) -> int:
321 """int: Maximum 1D layered surface width."""
322 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2pk
324 @property
325 def maximum_surface1d_layered_layers(self) -> int:
326 """int: Maximum layers in a 1D layered surface."""
327 return self._get_cached_attribute( 2lx
328 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2lx
329 )
331 @property
332 def maximum_surface2d_layered_width(self) -> int:
333 """int: Maximum 2D layered surface width."""
334 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2fy
336 @property
337 def maximum_surface2d_layered_height(self) -> int:
338 """int: Maximum 2D layered surface height."""
339 return self._get_cached_attribute( 2mx
340 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2mx
341 )
343 @property
344 def maximum_surface2d_layered_layers(self) -> int:
345 """int: Maximum layers in a 2D layered surface."""
346 return self._get_cached_attribute( 2nx
347 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2nx
348 )
350 @property
351 def maximum_surfacecubemap_width(self) -> int:
352 """int: Maximum cubemap surface width."""
353 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2ky
355 @property
356 def maximum_surfacecubemap_layered_width(self) -> int:
357 """int: Maximum cubemap layered surface width."""
358 return self._get_cached_attribute( 2px
359 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2px
360 )
362 @property
363 def maximum_surfacecubemap_layered_layers(self) -> int:
364 """int: Maximum layers in a cubemap layered surface."""
365 return self._get_cached_attribute( 2ox
366 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2ox
367 )
369 @property
370 def max_registers_per_block(self) -> int:
371 """int: Maximum number of 32-bit registers available to a thread block."""
372 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2ay
374 @property
375 def clock_rate(self) -> int:
376 """int: Typical clock frequency in kilohertz."""
377 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2!g#wyzG Rlvk
379 @property
380 def texture_alignment(self) -> int:
381 """int: Alignment requirement for textures."""
382 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2Ny
384 @property
385 def texture_pitch_alignment(self) -> int:
386 """int: Pitch alignment requirement for textures."""
387 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2Oy
389 @property
390 def gpu_overlap(self) -> bool:
391 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
392 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2,x
394 @property
395 def multiprocessor_count(self) -> int:
396 """int: Number of multiprocessors on device."""
397 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2Gykl
399 @property
400 def kernel_exec_timeout(self) -> bool:
401 """bool: Specifies whether there is a run time limit on kernels."""
402 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2zz
404 @property
405 def integrated(self) -> bool:
406 """bool: Device is integrated with host memory."""
407 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2mk
409 @property
410 def can_map_host_memory(self) -> bool:
411 """bool: Device can map host memory into CUDA address space."""
412 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 26x
414 @property
415 def compute_mode(self) -> int:
416 """int: Compute mode (See CUcomputemode for details)."""
417 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2Sk
419 @property
420 def concurrent_kernels(self) -> bool:
421 """bool: Device can possibly execute multiple kernels concurrently."""
422 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2!x
424 @property
425 def ecc_enabled(self) -> bool:
426 """bool: Device has ECC support enabled."""
427 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2'x
429 @property
430 def pci_bus_id(self) -> int:
431 """int: PCI bus ID of the device."""
432 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2Jy
434 @property
435 def pci_device_id(self) -> int:
436 """int: PCI device ID of the device."""
437 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2Ky
439 @property
440 def pci_domain_id(self) -> int:
441 """int: PCI domain ID of the device."""
442 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2uk
444 @property
445 def tcc_driver(self) -> bool:
446 """bool: Device is using TCC driver model."""
447 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2My
449 @property
450 def memory_clock_rate(self) -> int:
451 """int: Peak memory clock frequency in kilohertz."""
452 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2Az
454 @property
455 def global_memory_bus_width(self) -> int:
456 """int: Global memory bus width in bits."""
457 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2)x
459 @property
460 def l2_cache_size(self) -> int:
461 """int: Size of L2 cache in bytes."""
462 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2=x
464 @property
465 def max_threads_per_multiprocessor(self) -> int:
466 """int: Maximum resident threads per multiprocessor."""
467 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2cyFxGxHxIxJxKxIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw
469 @property
470 def unified_addressing(self) -> bool:
471 """bool: Device shares a unified address space with the host."""
472 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a Qy
474 @property
475 def compute_capability_major(self) -> int:
476 """int: Major compute capability version number."""
477 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-kQm}v~vRmSmTmUmVmawrpsp8dAd9dBd!dCd#dDd$dEd%dFdbwtpcwdwupvpwpxpypzpApBpCpDpEpQkRkdpepelWmXmHpYmZm0m1m2m7ljl.kql3mrlsltlul/k#wMp5p9xG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDeEeydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwFeGeHeIe
479 @property
480 def compute_capability_minor(self) -> int:
481 """int: Minor compute capability version number."""
482 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-kQm}v~vRmSmTmUmVmawrpsp8dAd9dBd!dCd#dDd$dEd%dFdbwtpcwdwupvpwpxpypzpApBpCpDpEpQkRkdpepelWmXmHpYmZm0m1m2m7ljl.kql3mrlsltlul/k#wMp5p^zG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDeEeydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwFeGeHeIe
484 @property
485 def global_l1_cache_supported(self) -> bool:
486 """bool: Device supports caching globals in L1."""
487 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2(x
489 @property
490 def local_l1_cache_supported(self) -> bool:
491 """bool: Device supports caching locals in L1."""
492 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2?x
494 @property
495 def max_shared_memory_per_multiprocessor(self) -> int:
496 """int: Maximum shared memory available per multiprocessor in bytes."""
497 return self._get_cached_attribute( 2kxFxGxHxIxJxKxIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw
498 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2kxFxGxHxIxJxKxIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw
499 )
501 @property
502 def max_registers_per_multiprocessor(self) -> int:
503 """int: Maximum number of 32-bit registers available per multiprocessor."""
504 return self._get_cached_attribute( 2ixIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw
505 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2ixIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw
506 )
508 @property
509 def managed_memory(self) -> bool:
510 """bool: Device can allocate managed memory on this system."""
511 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf@x
513 @property
514 def multi_gpu_board(self) -> bool:
515 """bool: Device is on a multi-GPU board."""
516 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2Dy
518 @property
519 def multi_gpu_board_group_id(self) -> int:
520 """int: Unique id for a group of devices on the same multi-GPU board."""
521 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2Ey
523 @property
524 def host_native_atomic_supported(self) -> bool:
525 """bool: Link between the device and the host supports all native atomic operations."""
526 return bool( 2fx
527 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2fx
528 )
530 @property
531 def single_to_double_precision_perf_ratio(self) -> int:
532 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
533 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2Bz
535 @property
536 def pageable_memory_access(self) -> bool:
537 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
538 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2tk
540 @property
541 def concurrent_managed_access(self) -> bool:
542 """bool: Device can coherently access managed memory concurrently with the CPU."""
543 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 26e7e8e9e!e#e/e:e;e=e?e@e[e]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdflkNpefff4m2e5mSl6mTlUl7m8m8l;k9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w)m4l
545 @property
546 def compute_preemption_supported(self) -> bool:
547 """bool: Device supports compute preemption."""
548 return bool( 2~w
549 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2~w
550 )
552 @property
553 def can_use_host_pointer_for_registered_mem(self) -> bool:
554 """bool: Device can access host registered memory at the same virtual address as the CPU."""
555 return bool( 2$w
556 self._get_cached_attribute( 2$w
557 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2$w
558 )
559 )
561 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
563 @property
564 def cooperative_launch(self) -> bool:
565 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
566 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2#xkl
568 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
570 @property
571 def max_shared_memory_per_block_optin(self) -> int:
572 """int: Maximum optin shared memory per block."""
573 return self._get_cached_attribute( 2jx
574 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2jx
575 )
577 @property
578 def pageable_memory_access_uses_host_page_tables(self) -> bool:
579 """bool: Device accesses pageable memory via the host's page tables."""
580 return bool( 2-w
581 self._get_cached_attribute( 2-w
582 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2-w
583 )
584 )
586 @property
587 def direct_managed_mem_access_from_host(self) -> bool:
588 """bool: The host can directly access managed memory on the device without migration."""
589 return bool( 2'w
590 self._get_cached_attribute( 2'w
591 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2'w
592 )
593 )
595 @property
596 def virtual_memory_management_supported(self) -> bool:
597 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
598 return bool( 2/whlwlJeewil4e
599 self._get_cached_attribute( 2/whlwlJeewil4e
600 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2/whlwlJeewil4e
601 )
602 )
604 @property
605 def handle_type_posix_file_descriptor_supported(self) -> bool:
606 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
607 return bool( 27p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw)w$jFwGwHwq P r s
608 self._get_cached_attribute( 27p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw)w$jFwGwHwq P r s
609 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 27p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw)w$jFwGwHwq P r s
610 )
611 )
613 @property
614 def handle_type_win32_handle_supported(self) -> bool:
615 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
616 return bool( 2cx
617 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2cx
618 )
620 @property
621 def handle_type_win32_kmt_handle_supported(self) -> bool:
622 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
623 return bool( 2#j
624 self._get_cached_attribute( 2#j
625 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2#j
626 )
627 )
629 @property
630 def max_blocks_per_multiprocessor(self) -> int:
631 """int: Maximum number of blocks per multiprocessor."""
632 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2_x
634 @property
635 def generic_compression_supported(self) -> bool:
636 """bool: Device supports compression of memory."""
637 return bool( 2ax
638 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2ax
639 )
641 @property
642 def max_persisting_l2_cache_size(self) -> int:
643 """int: Maximum L2 persisting lines capacity setting in bytes."""
644 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2}x
646 @property
647 def max_access_policy_window_size(self) -> int:
648 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
649 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2[x
651 @property
652 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
653 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
654 return bool( 2(w
655 self._get_cached_attribute( 2(w
656 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2(w
657 )
658 )
660 @property
661 def reserved_shared_memory_per_block(self) -> int:
662 """int: Shared memory reserved by CUDA driver per block in bytes."""
663 return self._get_cached_attribute( 2'j
664 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2'j
665 )
667 @property
668 def sparse_cuda_array_supported(self) -> bool:
669 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
670 return bool( 2Cx
671 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2Cx
672 )
674 @property
675 def read_only_host_register_supported(self) -> bool:
676 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
677 return bool( 2Bx
678 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2Bx
679 )
681 @property
682 def memory_pools_supported(self) -> bool:
683 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
684 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2lwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpWpXpYpZp0p1p2p3pXxYxZx0x1x2x)e6e/gPeQe:gAd;g=g?g@g[g*e7e]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8elhTeUemhCdnhohphqhrh,e9eshVeWethDduhvhwhxhyh-e!ezhXeYeAhEdBhChDhEhFh.e#eGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h3x4x4pFpGpQkRkCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYz7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEwAyNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w+h)mBl4lKp3ePp$jFwGwZzHw,h-h.h/h:h;h=h?h@h[hId7f8f]h^h_h`hJd{h|h}h~hS T U V W aibicidieibgcgdgegfgKeLeMeNeOefiKd9f!fgihiiijiLdkiliminiMx#f$f%f'fMd(f)foipiqirisitiuiviwixiyizi+ , - . / OdPdQdAiBiCiDiEiRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: ; = ? @ QiRiSiTiUigghgigjgkgViWiXiYiZiVd.f/f0i1i2i3iWd4i5i6i7i3 4 5 6 7 8i9i!i#i$ilgmgngogpgvgwgxgygzg%iXd:f;f'i(i)i*iYd+i,i-i.i=f?f@f[f]fZd^f_f/i:i;i=i?i@i[i]i^i_i`i{i` { | } ~ 1d2d3d|i}i~iajbj4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjabbbcbdbebnjojpjqjrjqgrgsgtgugq P r s sjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5jHk
686 @property
687 def gpu_direct_rdma_supported(self) -> bool:
688 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
689 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2*xil4e
691 @property
692 def gpu_direct_rdma_flush_writes_options(self) -> int:
693 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
694 return self._get_cached_attribute( 2%j
695 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2%j
696 )
698 @property
699 def gpu_direct_rdma_writes_ordering(self) -> int:
700 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
701 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2+x
703 @property
704 def mempool_supported_handle_types(self) -> int:
705 """int: Handle types supported with mempool based IPC."""
706 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2By
708 @property
709 def deferred_mapping_cuda_array_supported(self) -> bool:
710 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
711 return bool( 2%w
712 self._get_cached_attribute( 2%w
713 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2%w
714 )
715 )
717 @property
718 def numa_config(self) -> int:
719 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
720 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2Hy
722 @property
723 def numa_id(self) -> int:
724 """int: NUMA node ID of the GPU memory."""
725 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2Iy
727 @property
728 def multicast_supported(self) -> bool:
729 """bool: Device supports switch multicast and reduction operations."""
730 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2Fy
732 @property
733 def surface_alignment(self) -> int:
734 """int: Surface alignment requirement in bytes."""
735 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2Ly
737 @property
738 def async_engine_count(self) -> int:
739 """int: Number of asynchronous engines."""
740 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2kk
742 @property
743 def can_tex2d_gather(self) -> bool:
744 """bool: True if device supports 2D texture gather operations, False if not."""
745 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 27x
747 @property
748 def maximum_texture2d_gather_width(self) -> int:
749 """int: Maximum 2D texture gather width."""
750 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2ny
752 @property
753 def maximum_texture2d_gather_height(self) -> int:
754 """int: Maximum 2D texture gather height."""
755 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2rk
757 @property
758 def stream_priorities_supported(self) -> bool:
759 """bool: True if device supports stream priorities, False if not."""
760 return bool( 2Dx
761 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2Dx
762 )
764 @property
765 def can_flush_remote_writes(self) -> bool:
766 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
767 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 25x
769 @property
770 def host_register_supported(self) -> bool:
771 """bool: Device supports host memory registration via cudaHostRegister."""
772 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2:x
774 @property
775 def timeline_semaphore_interop_supported(self) -> bool:
776 """bool: External timeline semaphore interop is supported on the device."""
777 return bool( 2.w
778 self._get_cached_attribute( 2.w
779 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2.w
780 )
781 )
783 @property
784 def cluster_launch(self) -> bool:
785 """bool: Indicates device supports cluster launch."""
786 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 28x
788 @property
789 def can_use_64_bit_stream_mem_ops(self) -> bool:
790 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
791 return bool( 2|w
792 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2|w
793 )
795 @property
796 def can_use_stream_wait_value_nor(self) -> bool:
797 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
798 return bool( 2}w
799 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2}w
800 )
802 @property
803 def dma_buf_supported(self) -> bool:
804 """bool: Device supports buffer sharing with dma_buf mechanism."""
805 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2%x
807 # Start of CUDA 12 device attributes
809 @property
810 def ipc_event_supported(self) -> bool:
811 """bool: Device supports IPC Events."""
812 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2;x
814 @property
815 def mem_sync_domain_count(self) -> int:
816 """int: Number of memory domains the device supports."""
817 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2zy
819 @property
820 def tensor_map_access_supported(self) -> bool:
821 """bool: Device supports accessing memory using Tensor Map."""
822 return bool( 2ExwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f
823 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2ExwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f
824 )
826 @property
827 def handle_type_fabric_supported(self) -> bool:
828 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
829 return bool( 2bx
830 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2bx
831 )
833 @property
834 def unified_function_pointers(self) -> bool:
835 """bool: Device supports unified function pointers."""
836 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2Ry
838 @property
839 def mps_enabled(self) -> bool:
840 """bool: Indicates if contexts created on this device will be shared via MPS."""
841 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2Cy
843 @property
844 def host_numa_id(self) -> int:
845 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
846 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 29l!l#lk IkJk$l%l'l(l)l*l+l,l(e-l.l/l:l;lKk=l?lLk@l[ll /xUl%hCk'h(h)h*h8gMk9ggllo
848 @property
849 def d3d12_cig_supported(self) -> bool:
850 """bool: Device supports CIG with D3D12."""
851 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2$x
853 @property
854 def mem_decompress_algorithm_mask(self) -> int:
855 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
856 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2xy
858 @property
859 def mem_decompress_maximum_length(self) -> int:
860 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
861 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2yy
863 @property
864 def vulkan_cig_supported(self) -> bool:
865 """bool: Device supports CIG with Vulkan."""
866 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2Sy
868 @property
869 def gpu_pci_device_id(self) -> int:
870 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
872 Returns 0 if the driver does not support this query.
873 """
874 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2-x
876 @property
877 def gpu_pci_subsystem_id(self) -> int:
878 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
880 Returns 0 if the driver does not support this query.
881 """
882 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2.x
884 @property
885 def host_numa_virtual_memory_management_supported(self) -> bool:
886 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
887 return bool( 2*w
888 self._get_cached_attribute( 2*w
889 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2*w
890 )
891 )
893 @property
894 def host_numa_memory_pools_supported(self) -> bool:
895 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
896 return bool( 2gx
897 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2gx
898 )
900 # Start of CUDA 13 device attributes
902 @property
903 def host_numa_multinode_ipc_supported(self) -> bool:
904 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
905 return bool( 2hx
906 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2hx
907 )
909 @property
910 def host_memory_pools_supported(self) -> bool:
911 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
912 return bool( 29l!l#lk IkJk$l%l'l(l)l*l+l,l(e-l.l/l:l;lKk=l?lLk@l[ll exfl%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk*m5lPp6pTk9g6l8wgllo9w
913 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 29l!l#lk IkJk$l%l'l(l)l*l+l,l(e-l.l/l:l;lKk=l?lLk@l[ll exfl%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk*m5lPp6pTk9g6l8wgllo9w
914 )
916 @property
917 def host_virtual_memory_management_supported(self) -> bool:
918 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
919 return bool( 2+w
920 self._get_cached_attribute( 2+w
921 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2+w
922 )
923 )
925 @property
926 def host_alloc_dma_buf_supported(self) -> bool:
927 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
928 return bool( 2dx
929 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2dx
930 )
932 @property
933 def only_partial_host_native_atomic_supported(self) -> bool:
934 """bool: Link between the device and the host supports only some native atomic operations."""
935 return bool( 2,w
936 self._get_cached_attribute( 2,w
937 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2,w
938 )
939 )
942class Device:
943 """Represent a GPU and act as an entry point for cuda.core features.
945 This is a singleton object that helps ensure interoperability
946 across multiple libraries imported in the process to both see
947 and use the same GPU device.
949 While acting as the entry point, many other CUDA resources can be
950 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
951 resource created through this device, will continue to refer to
952 this device's context.
954 Newly returned :obj:`~_device.Device` objects are thread-local singletons
955 for a specified device.
957 Note
958 ----
959 Will not initialize the GPU.
961 Parameters
962 ----------
963 device_id : int, optional
964 Device ordinal to return a :obj:`~_device.Device` object for.
965 Default value of `None` return the currently used device.
967 """
968 __slots__ = (
969 "_device_id",
970 "_memory_resource",
971 "_has_inited",
972 "_properties",
973 "_resources",
974 "_uuid",
975 "_context",
976 "__weakref__",
977 )
979 def __new__(cls, device_id: Device | int | None = None) -> Device:
980 if isinstance(device_id, Device): 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rhECziEDzjEEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!p:Dk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laC`EKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6snESb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jbEFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
981 return device_id 2QkRkhEiEjE;w7l=w?w@w/y[wjl7p2z8p3z9p^l!p:D#pzk$p%p'p(p)p*p+p,p-p.p/p:p;p=pt ?p@pAkUyVy[p]p^pQpRp*A+A,A-Azl)DGk*D+D:kVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l+hBl`E3ewlJeewil-C;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcB#AbE$A%Aq P
983 Device_ensure_cuda_initialized() 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6snESb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
984 device_id = Device_resolve_device_id(device_id) 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6snESb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
985 devices = Device_ensure_tls_devices(cls) 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6sSb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
987 try: 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6sSb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
988 return devices[device_id] 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6sSb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
989 except IndexError: 2%D'D
990 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2%D'D
992 def _check_context_initialized(self) -> None:
993 if not self._has_inited: 2.C/CdBnlWkeBXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-k:CSpTpUpVpQmgB;C=CRmSmTmUmVmWpXpYpZp0p1p2p3pPeQeReSeTeUeVeWeXeYeZe0e4p?C@C*CFpkBlBmBGpnBQkRkelWmXm[CYmZm0m_z1m2mhEiEjEoEpEqE;w7l=w?w@w/y[wjlNxOxPxkElEmE5C6C7C.kql3mrlsltlul0z/ksEtE{E|EuE}E~E]C^CvEwEaFbFcFdFeF1z!g#w=D?D@D[D]D^D_D`DrEfFgFxl,Djs4CUyVy:y;DQpRp*A+A,A-A_C`C{C|C}C~C=k?k+CaDllG Nk,C@kEBbDcDdDeDfDgDRlhDiDjDkDlDmDnDyl$z%z'z(z)z*z+z,zno-z.z/z:z5z`lmlvk;yUkkl;z=yVk(j)jhFiFxEjFyEkFlFzEAEmFnFoFBEpFCEDEEEFEGEHEIEJEKEqFLEMENEOErFPEQEsFtFuFvFREwFSExFyFTEUEzFAFBFVECFWEXEYEZE0E1E2E3E4EDF5E6E7E8EEF9E!EFFGFHFIF#EJF$EKFLF%E'EMFNFOF(EPF)E*E+E,E-E.E/E:E;EQF=E?E@E[ERF]E^ESFTFGk8l:k;kfl7zTkgCiCagcE*jHo?m@m[mJo+jKo,jLo]m^m_mMo7f8fS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y `m{mbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVo5eEkwkxkykFk9f!fMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsn(f)ftnunw x 1 2 vnwn*f+f,f-fy z xnyngg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3o]j4oznAnBn5o.f/f3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 CnDnlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'o9jMmKlLlMlNm:f;f=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZn^f_f0n1nC D ' ( 2n3n`f{f|f}fE F 4n5nqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:or s ck;o6n7n8n=odk?o9n!n#n@oek[o$n%n'n]ofk^o(n)n*n_ogk`o+n,n-n{ohk|o.n/n:n}oik~o;n=n?napjkbp@n[n]ncpoD'CpDqDrDsD(CtDuDvDwDxDyDzDADBDCDDDED)CFDGD
994 raise CUDAError(
995 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
996 )
999 @classmethod
1000 def get_all_devices(cls) -> tuple[Device, ...]:
1001 """
1002 Query the available device instances.
1004 Returns
1005 -------
1006 tuple of Device
1007 A tuple containing instances of available devices.
1008 """
1009 from cuda.core import system 2:w1e]wQDRD_l=mSDUDVD^wWDXDYDZD0D1D2D3D4D5D;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBHk
1010 total = system.get_num_devices() 2:w1e]wQDRD_l=mSDUDVD^wWDXDYDZD0D1D2D3D4D5D;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBHk
1011 return tuple(cls(device_id) for device_id in range(total)) 2:w1e]wQDRD_l=mSDUDVD^wWDXDYDZD0D1D2D3D4D5D;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBHk
1013 def to_system_device(self) -> 'cuda.core.system.Device':
1014 """
1015 Get the corresponding :class:`cuda.core.system.Device` (which is used
1016 for NVIDIA Machine Library (NVML) access) for this
1017 :class:`cuda.core.Device` (which is used for CUDA access).
1019 The devices are mapped to one another by their UUID.
1021 Returns
1022 -------
1023 cuda.core.system.Device
1024 The corresponding system-level device instance used for NVML access.
1025 """
1026 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2!w
1028 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2!w
1029 raise RuntimeError(
1030 "cuda.core.system.Device requires cuda_bindings 13.1.2+ or 12.9.6+"
1031 )
1033 from cuda.core.system import Device as SystemDevice 2!w
1034 return SystemDevice(uuid=self.uuid) 2!w
1036 @property
1037 def device_id(self) -> int:
1038 """Return device ordinal."""
1039 return self._device_id 2lwmw)e6e*e7e+e8e,e9e-e!e.e#eQkRkdpepelhEiEjEoEpEqE;w7l=w?w@w/y[wjlNxOxPxkElEmE5C6C7CIDVFsEtEJD.Dkw`zWF{E|EuE}E~E/DvEwEmo7pdE2z8p3z.m9p{D^l!p:D!g#pDkzk$p%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p/m=p|D}Dt ~D:m?paExl@p,DjsAkUyVy:y[p!z]p;m^pQpRp*A+A,A-A5p=k?k=mlzCBDB5z`lml(j)jvlzl)DGk*D+DTD2eTl:k;kVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l+hBl`E3egCiChlwlJeewil-C+m,m6D7DagIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcB#AbE$A%A*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jppqpq P ckdkekfkgkhkikjk[zXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-FIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g5g6g]z
1041 @property
1042 def pci_bus_id(self) -> str:
1043 """Return a PCI Bus Id string for this device."""
1044 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2_lCB!w
1045 return bus_id[:12].decode() 2_lCB!w
1047 def can_access_peer(self, peer: Device | int) -> bool:
1048 """Check if this device can access memory from the specified peer device.
1050 Queries whether peer-to-peer memory access is supported between this
1051 device and the specified peer device.
1053 Parameters
1054 ----------
1055 peer : Device | int
1056 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1057 """
1058 peer = Device(peer)
1059 cdef int d1 = <int> self.device_id
1060 cdef int d2 = <int> peer.device_id
1061 if d1 == d2:
1062 return True
1063 cdef int value = 0
1064 with nogil:
1065 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1066 return bool(value)
1068 @property
1069 def uuid(self) -> str:
1070 """Return a UUID for the device.
1072 Returns 16-octets identifying the device. If the device is in
1073 MIG mode, returns its MIG UUID which uniquely identifies the
1074 subscribed MIG compute instance.
1076 Note
1077 ----
1078 MIG UUID is only returned when device is in MIG mode and the
1079 driver is older than CUDA 11.4.
1081 The UUID is cached after first access to avoid repeated CUDA API calls.
1083 """
1084 cdef cydriver.CUuuid uuid
1085 cdef cydriver.CUdevice dev
1086 cdef bytes uuid_b
1087 cdef str uuid_hex
1089 if self._uuid is None: 2kw`z7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw_l.A#z/A:A!wDB8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$jFwGwHw[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1090 dev = self._device_id 2kw`zk Q zk(et Akl R _l.A#z/A:A!w8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$j[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1091 with nogil: 2kw`zk Q zk(et Akl R _l.A#z/A:A!w8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$j[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1092 IF CUDA_CORE_BUILD_MAJOR == 12:
1093 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1094 ELSE: # 13.0+
1095 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2kw`zk Q zk(et Akl R _l.A#z/A:A!w8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$j[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1096 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2kw`zk Q zk(et Akl R _l.A#z/A:A!w8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$j[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1097 uuid_hex = uuid_b.hex() 2kw`zk Q zk(et Akl R _l.A#z/A:A!w8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$j[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1098 # 8-4-4-4-12
1099 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2kw`zk Q zk(et Akl R _l.A#z/A:A!w8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$j[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1100 return self._uuid 2kw`z7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw_l.A#z/A:A!wDB8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$jFwGwHw[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1102 @property
1103 def name(self) -> str:
1104 """Return the device name."""
1105 # Use 256 characters to be consistent with CUDA Runtime
1106 cdef int LENGTH = 256 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1107 cdef bytes name = bytes(LENGTH) 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1108 cdef char* name_ptr = name 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1109 cdef cydriver.CUdevice this_dev = self._device_id 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1110 with nogil: 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1111 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1112 name = name.split(b"\0")[0] 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1113 return name.decode() 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxlzbl
1115 @property
1116 def properties(self) -> DeviceProperties:
1117 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1118 if self._properties is None: 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m_z1m2mCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUzVzWzXzYz.kql3mrlsltlul0z/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf7p9l8p!l9p#l!pk !g#p#wIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEwMp5p8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)Avkkl9CIp;zWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%CwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc$jFwGwZzHw,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiMxZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3j{wEe4j5jydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
1119 self._properties = DeviceProperties._init(self._device_id) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m1m2m5h.kql3mrlsltlul/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfk Q (et l R kkSklk%j#jmknkokpkqkrksktkuk'jG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m:k;kflVl8hAlWl9hXl!hYl#hZl$h7g0l9m1l1w!m2w3w4w#m5w6w$m7w%m%h2l'h(h'm)h(m*h3l8g+h)m*mBl4l5lKp3eTk9g6l8wgl9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc$j,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3jEe4j5jydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkoHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
1121 return self._properties 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmwRxSxTxUxVx)g*g+g,g-g.gWxSpTpUpVpQm}v~vRmSmTmUmVmWpXpYpZp0p1p2p3pawXxYxZx0x1x2xrpsp)e6e8d/gPeQe:gAd;g=g?g@g[g*e7e9d]gReSe^gBd_g`g{g|g}g~gahbhchdhehfhghhhihjhkh+e8e!dlhTeUemhCdnhohphqhrh,e9e#dshVeWethDduhvhwhxhyh-e!e$dzhXeYeAhEdBhChDhEhFh.e#e%dGhZe0eHhFdIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4hbw3x4xtpcw4pdwupvpwpxpypzpApBpCpDpEpFpGpQkRkdpepelWmXmHpYmZm0m_z1m2mCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUzVzWzXzYz.kql3mrlsltlul0z/k/e:e;e=e?e@e[e^n]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf7p9l8p!l9p#l!pk !g#p#wIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEwMp5p8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyG Rlylb GdHd(A)Avkkl9CIp;zWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefffvlzl6hGk7hJp4m2e5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lKp3ePp6pTk9g6l8wgllo9whlwlJeewil4e_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%CwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc$jFwGwZzHw,h'd-h.hMc(d/h:hNcOc;h)d=h?hPc*d@h[hQcId7f8f]h^h_h`hJd{h|h}h~hS g T U c h V W d X Y +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Keo LeMem p NeOen fiKd9f!fgihiiijiLdkiliminiMxZ #f$fu 0 %f'fv Md(f)foipiqirisitiuivi=dwixi?dyizi+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dBiCi1c{dDiEi2cRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRiSi}dTiUigg[ hgigJ ] jgkgK ViTdWiXi'cUdYiZi(cVd.f/f0i1i2i3iWd4i5i6i7i3 i 4 5 e j 6 7 f 8 9 ~daebecede8iee9i!ife#i$ilg^ mgngL _ ogpgM vg)cwgxg! *cygzg# %iXd:f;f'i(i)i*iYd+i,i-i.i=f$ ?f@fA % [f]fB Zd^f_f/i:i;i=i?i@i[i]ige^i_ihe`i{i` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine}i~i[coeajbj]c4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeojpjqeqjrjqgfbrgsgN gbtgugO q P r s edfdsjretjujgdsevjwjhdidjdkdxj6dyjzjld7dAjBjmdCjteDjEjndueFjGjodHjveIjJjpdweKjLjqdMjxeNjOjrdyePjQjsdRjzeSjTjtdAeUjVjudWjBeXjYjvdCeZj0jwdxd1jDe2j3j{wEe4j5jydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonwHkwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
1123 @property
1124 def resources(self) -> DeviceResources:
1125 """Return the hardware resource query namespace for this device."""
1126 if self._resources is None: 2ooAgBgb GdHdCgDgEgFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGo
1127 self._resources = DeviceResources._init(self._device_id) 2ooAgBgb GdHdCgDgEgFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGo
1128 return self._resources 2ooAgBgb GdHdCgDgEgFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGo
1130 @property
1131 def compute_capability(self) -> ComputeCapability:
1132 """Return a named tuple with 2 fields: major and minor."""
1133 cdef DeviceProperties prop = self.properties 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-kQm}v~vRmSmTmUmVmawrpsp8dAd9dBd!dCd#dDd$dEd%dFdbwtpcwdwupvpwpxpypzpApBpCpDpEpQkRkdpepelWmXmHpYmZm0m_z1m2m;w7l=w?w@w/y[wjlNxOxPx.kql3mrlsltlul0z/k!g#wMp5pG Rlylb GdHd(A)Avkkl9CIp;zWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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#C~b$Cacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvc%CwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDe{wEeydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonwFeGeHeIe
1134 if "compute_capability" in prop._cache: 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-kQm}v~vRmSmTmUmVmawrpsp8dAd9dBd!dCd#dDd$dEd%dFdbwtpcwdwupvpwpxpypzpApBpCpDpEpQkRkdpepelWmXmHpYmZm0m_z1m2m;w7l=w?w@w/y[wjlNxOxPx.kql3mrlsltlul0z/k!g#wMp5pG Rlylb GdHd(A)Avkkl9CIp;zWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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#C~b$Cacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvc%CwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDe{wEeydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonwFeGeHeIe
1135 return prop._cache["compute_capability"] 2a _z;w7l=w?w@w/y[wjlNxOxPx0z!g#wMpylb GdHdkl9C;zWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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#C~b$Cacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvc%CwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLcMcNcOcPcQcc d H I m n u v + RcSc, w x - TcUcVcWcXc. / YcZc0cNd1c2c: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cJ K Td'cUd(ce f L M ! # A B ` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d[c]cab^c_cbbE F cb`c{c|c}c~caddbebbdcdddN O edfdgdhdidjdkd6dld7dmdndodpdqdrdsdtdudvdwdxd{wydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonw
1136 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-kQm}v~vRmSmTmUmVmawrpsp8dAd9dBd!dCd#dDd$dEd%dFdbwtpcwdwupvpwpxpypzpApBpCpDpEpQkRkdpepelWmXmHpYmZm0m1m2m7ljl.kql3mrlsltlul/k#wMp5pG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDeEeydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwFeGeHeIe
1137 prop._cache["compute_capability"] = cc 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-kQm}v~vRmSmTmUmVmawrpsp8dAd9dBd!dCd#dDd$dEd%dFdbwtpcwdwupvpwpxpypzpApBpCpDpEpQkRkdpepelWmXmHpYmZm0m1m2m7ljl.kql3mrlsltlul/k#wMp5pG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDeEeydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwFeGeHeIe
1138 return cc 2a ~fnlWkXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-kQm}v~vRmSmTmUmVmawrpsp8dAd9dBd!dCd#dDd$dEd%dFdbwtpcwdwupvpwpxpypzpApBpCpDpEpQkRkdpepelWmXmHpYmZm0m1m2m7ljl.kql3mrlsltlul/k#wMp5pG Rlylb GdHd(A)AvkIphbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDeEeydzdfogohfhoiojoifjfkflfmfnfofpfqfrfsftfufvfkonwFeGeHeIe
1140 @property
1141 def arch(self) -> str:
1142 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1143 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a ;w7l=w?w@w/y[wjlNxOxPxMpylb GdHd;zNBlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRb_nSbTb+mUb,mVbWbXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLcMcNcOcPcQcc d H I m n u v + RcSc, w x - TcUcVcWcXc. / YcZc0c1c2c: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cJ K 'c(ce f L M ! # A B ` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c[c]cab^c_cbbE F cb`c{c|c}c~caddbebbdcdddN O edfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxd{wydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonw
1145 @property
1146 def context(self) -> Context:
1147 """Return the :obj:`~_context.Context` associated with this device.
1149 Note
1150 ----
1151 Device must be initialized.
1153 """
1154 self._check_context_initialized() 2HoLobg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoEkElLm4olg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'oMmNlOm;o?o[o^o`o|o~obp
1155 return self._context 2HoLobg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoEkElLm4olg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'oMmNlOm;o?o[o^o`o|o~obp
1157 @property
1158 def memory_resource(self) -> MemoryResource:
1159 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1160 cdef int attr, device_id
1161 if self._memory_resource is None: 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6g]z
1162 # If the device is in TCC mode, or does not support memory pools for some other reason,
1163 # use the SynchronousMemoryResource which does not use memory pools.
1164 device_id = self._device_id 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g]z
1165 with nogil: 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g]z
1166 HANDLE_RETURN( 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g]z
1167 cydriver.cuDeviceGetAttribute( 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g]z
1168 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1169 )
1170 )
1171 if attr == 1: 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g]z
1172 from cuda.core._memory import DeviceMemoryResource 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g]z
1173 self._memory_resource = DeviceMemoryResource(self._device_id) 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g]z
1174 else:
1175 from cuda.core._memory._legacy import _SynchronousMemoryResource
1176 self._memory_resource = _SynchronousMemoryResource(self._device_id)
1178 return self._memory_resource 2=k?k5z`lml(j)jag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjkIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6g]z
1180 @memory_resource.setter
1181 def memory_resource(self, mr: MemoryResource) -> None:
1182 from cuda.core._memory import MemoryResource
1183 assert_type(mr, MemoryResource)
1184 self._memory_resource = mr
1186 @property
1187 def default_stream(self) -> Stream:
1188 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1190 The type of default stream returned depends on if the environment
1191 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1193 If set, returns a per-thread default stream. Otherwise returns
1194 the legacy stream.
1196 """
1197 return default_stream() 2QkRksEtE.F$euE%e'evEwEaFbFcFdFeF2z3z.m{D^l:DDkHD/FKD:FLD;FMD=FND?FOD@FPD[F]F^F_F`F{F|F}F~FaGbGcG/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQpRp*A+A,A-A=k?kWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.y(j)jvlzlGk2eSl8l:k;kflAlBkOp7g1lLx2lCk3l8gBl4l5l`E3ePp6pTk9g6lag*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jq P ckdkekfkgkhkikjk8DIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6g]z
1199 def __int__(self) -> int:
1200 """Return device_id."""
1201 return self._device_id 2kElEmEID=k?k
1203 def __repr__(self) -> str:
1204 return f"<Device {self._device_id} ({self.name})>" 2kwmodE2z3z.m{D^l:D!g#w=D?D@D[D]D^D_D`DDkHD/m|D}D~D:maExl,Djs4CUyVy:y;D!zfE;mgEQxbl
1206 def __hash__(self) -> int:
1207 return hash(self.uuid) 2kw`z7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw.A#z/A:A8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$jFwGwHw[kKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalq P r s cldlOkPk
1209 def __eq__(self, other: object) -> bool:
1210 if not isinstance(other, Device): 2kw7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw#D#z$D(D8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$jFwGwHwIovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpopq r s OkPk)C
1211 return NotImplemented 2kw(DIovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop)C
1212 return self._device_id == other._device_id 2kw7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwzkJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?lAkLkywzw[p@l]p[l^pl AwBwCwR DwEw#D#z$D8hBk9h!h#h$h7g]l%hCk'h(h)h*h8gMk+h9ggllo$jFwGwHwIoq r s OkPk
1214 def __reduce__(self) -> tuple[object, ...]:
1215 return Device, (self.device_id,) 2modE2z3z.m{D^l:D!gDkKDLDMDNDODPD/m|D}D~D:maExl,DjsUyVy:y!z;mQpRp*A+A,A-Appqp
1217 def set_current(self, ctx: Context | None = None) -> Context | None:
1218 """Set device to be used for GPU executions.
1220 Initializes CUDA and sets the calling thread to a valid CUDA
1221 context. By default the primary context is used, but optional `ctx`
1222 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1224 Providing a `ctx` causes the previous set context to be popped and returned.
1226 Parameters
1227 ----------
1228 ctx : :obj:`~_context.Context`, optional
1229 Optional context to push onto this device's current thread stack.
1231 Returns
1232 -------
1233 :obj:`~_context.Context`, optional
1234 Popped context.
1236 Examples
1237 --------
1238 Acts as an entry point of this object. Users always start a code by
1239 calling this method, e.g.
1241 >>> from cuda.core import Device
1242 >>> dev0 = Device(0)
1243 >>> dev0.set_current()
1244 >>> # ... do work on device 0 ...
1246 """
1247 cdef ContextHandle h_context
1248 cdef cydriver.CUcontext prev_ctx, curr_ctx
1249 cdef Context prev_owned = None 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHd9DCgDgEgDsFg!DGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1251 if ctx is not None: 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHd9DCgDgEgDsFg!DGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1252 # TODO: revisit once Context is cythonized
1253 assert_type(ctx, Context) 29D!D
1254 if ctx._device_id != self._device_id: 29D!D
1255 raise RuntimeError(
1256 "the provided context was created on the device with"
1257 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1258 )
1259 if self._has_inited and self._context is not None: 29D!D
1260 prev_owned = self._context 29D!D
1261 # prev_ctx is the previous context
1262 curr_ctx = as_cu(ctx._h_context) 29D!D
1263 prev_ctx = NULL 29D!D
1264 with nogil: 29D!D
1265 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 29D!D
1266 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 29D!D
1267 self._has_inited = True 29D!D
1268 self._context = ctx # Store owning context reference 29D!D
1269 if prev_ctx != NULL: 29D!D
1270 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 29D!D
1271 return prev_owned 29D!D
1272 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1273 else:
1274 # use primary ctx
1275 h_context = get_primary_context(self._device_id) 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1276 if h_context.get() == NULL: 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1277 raise ValueError("Cannot set NULL context as current")
1278 with nogil: 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1279 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1280 self._has_inited = True 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1281 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqfBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5qhB6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjB7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHzIz5hJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzpBYz}r~rasbscsdsesqBfs/e:egs;e=e?e@e[e^nhs]e$e1e^e%e_e'e`e{e|eLp}e~eafbfcfdf1zis7p9l8p!l9p#l!pk #pIkowQ pwqwrwswtwuwvwwwxwDkzkHDJk$p$l%p'p(p)p*p+p,p-p.p/p:p;p%l'l(l)l*l+l,l(e-l.l/l:l=p;lt Kk?p=l@p?ljsAk4CLkywzw[p@l]p[l^pl AwBwCwR DwEwkslsmsnsospsrB=k?ksBtBuBvBwBxBqs=myBzBQx4zABBBllG Nkrs@kssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkklKBLBFsMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.ylbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl6hGkSB7hJpTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1BVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B)B1lPs*B!m+BQsfw,B-Bgw.BRs#m/BSsLx:B;B$m=B?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l4sdCeCfChCjChlwlJe5sil4e6sSbTb7sUb8sVbWbXb9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBc_wCc`wDcEcFcGcHcIcJcKcLc#A$jbEFw$AGwcEZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyv'AzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSv[zTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSCTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1283 def create_context(self, options: ContextOptions | None = None) -> Context:
1284 """Create a new :obj:`~_context.Context` object.
1286 Note
1287 ----
1288 The newly created context will not be set as current.
1290 Parameters
1291 ----------
1292 options : :obj:`~_context.ContextOptions`, optional
1293 Customizable dataclass for context creation options.
1295 Returns
1296 -------
1297 :obj:`~_context.Context`
1298 Newly created context object.
1300 """
1301 cdef int i
1302 cdef object resources
1303 cdef object res
1304 cdef SMResource sm_res
1305 cdef WorkqueueResource wq_res
1306 cdef GreenCtxHandle h_green
1308 if options is None: 2-DAgBgb `lmlCgDgEgFgGgHgeE_E
1309 raise ValueError( 2_E
1310 "options with device resources must be provided to create a green context"
1311 )
1313 options = check_or_create_options(ContextOptions, options, "Context options") 2-DAgBgb `lmlCgDgEgFgGgHgeE_E
1314 if options.resources is None: 2-DAgBgb `lmlCgDgEgFgGgHgeE_E
1315 raise ValueError( 2_E
1316 "ContextOptions.resources must be provided to create a green context"
1317 )
1319 resources = tuple(options.resources) 2-DAgBgb `lmlCgDgEgFgGgHgeE
1320 if len(resources) == 0: 2-DAgBgb `lmlCgDgEgFgGgHgeE
1321 raise ValueError("ContextOptions.resources must not be empty")
1323 cdef vector[cydriver.CUdevResource] c_resources
1324 c_resources.resize(len(resources)) 2-DAgBgb `lmlCgDgEgFgGgHgeE
1326 for i, res in enumerate(resources): 2-DAgBgb `lmlCgDgEgFgGgHgeE
1327 if isinstance(res, SMResource): 2-DAgBgb `lmlCgDgEgFgGgHgeE
1328 sm_res = <SMResource>res 2-DAgBgb `lmlCgDgEgFgGgHgeE
1329 if not sm_res._is_usable: 2-DAgBgb `lmlCgDgEgFgGgHgeE
1330 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2eE
1331 c_resources[i] = sm_res._resource 2-DAgBgb `lmlCgDgEgFgGgHg
1332 elif isinstance(res, WorkqueueResource): 2ml
1333 wq_res = <WorkqueueResource>res 2ml
1334 c_resources[i] = wq_res._wq_config_resource 2ml
1335 else:
1336 raise TypeError(f"Unsupported context resource type: {type(res)}")
1338 h_green = create_green_ctx_handle( 2-DAgBgb `lmlCgDgEgFgGgHg
1339 c_resources.data(),
1340 <unsigned int>(c_resources.size()),
1341 <cydriver.CUdevice>(self._device_id), 2-DAgBgb `lmlCgDgEgFgGgHg
1342 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1343 )
1344 if h_green.get() == NULL: 2-DAgBgb `lmlCgDgEgFgGgHg
1345 HANDLE_RETURN(get_last_error())
1346 raise RuntimeError("Failed to create CUDA green context")
1348 return Context._from_green_ctx(Context, h_green, self._device_id) 2-DAgBgb `lmlCgDgEgFgGgHg
1350 def create_stream(self, obj: IsStreamType | None = None, options: object = None) -> Stream:
1351 """Create a :obj:`~_stream.Stream` object.
1353 New stream objects can be created in two different ways:
1355 1) Create a new CUDA stream with customizable ``options``.
1356 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1358 Option (2) internally holds a reference to the foreign object
1359 such that the lifetime is managed.
1361 Note
1362 ----
1363 Device must be initialized.
1365 Parameters
1366 ----------
1367 obj : :obj:`~_stream.IsStreamType`, optional
1368 Any object supporting the ``__cuda_stream__`` protocol.
1369 options : :obj:`~_stream.StreamOptions`, optional
1370 Customizable dataclass for stream creation options.
1372 Returns
1373 -------
1374 :obj:`~_stream.Stream`
1375 Newly created stream object.
1377 """
1378 self._check_context_initialized() 2.C/CdBnlWkeBXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-k:CSpTpUpVpQmgB;C=CRmSmTmUmVmWpXpYpZp0p1p2p3p4p?C@ClBmBQkRkelWmXm[CYmZm0m_z1m2mhEiEjEoEpEqE;w7l=w?w@w/y[wjlNxOxPxkElEmE5C6C7C.kql3mrlsltlul0z/ksEtE{E|EuE}E~E]C^CvEwEaFbFcFdFeF1z!g#w=D?D@D[D]D^D_D`DrEfFgFxl,Djs4CUyVy:y;DQpRp*A+A,A-A_C`C{C|C}C~CaDllG NkbDcDdDeDfDgDRlhDiDjDkDlDmDnDyl$z%z'z(z)z*z+z,zno-z.z/z:zvk;yUkkl;z=yVkhFiFxEjFyEkFlFzEAEmFnFoFBEpFCEDEEEFEGEHEIEJEKEqFLEMENEOErFPEQEsFtFuFvFREwFSExFyFTEUEzFAFBFVECFWEXEYEZE0E1E2E3E4EDF5E6E7E8EEF9E!EFFGFHFIF#EJF$EKFLF%E'EMFNFOF(EPF)E*E+E,E-E.E/E:E;EQF=E?E@E[ERF]E^ESFTFGk8l7zTkgCiCagcEJoKoMoFkgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3o5oNmqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:or s =o@o]o_o{o}oapcpoD'CpDqDrDsD(CtDuDvDwDxDyDzDADBDCDDDED)CFDGD
1379 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2.C/CdBnlWkeBXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-k:CSpTpUpVpQmgB;C=CRmSmTmUmVmWpXpYpZp0p1p2p3p4p?C@ClBmBQkRkelWmXm[CYmZm0m_z1m2mhEiEjEoEpEqE;w7l=w?w@w/y[wjlNxOxPxkElEmE5C6C7C.kql3mrlsltlul0z/ksEtE{E|EuE}E~E]C^CvEwEaFbFcFdFeF1z!g#w=D?D@D[D]D^D_D`DrEfFgFxl,Djs4CUyVy:y;DQpRp*A+A,A-A_C`C{C|C}C~CaDllG NkbDcDdDeDfDgDRlhDiDjDkDlDmDnDyl$z%z'z(z)z*z+z,zno-z.z/z:zvk;yUkkl;z=yVkhFiFxEjFyEkFlFzEAEmFnFoFBEpFCEDEEEFEGEHEIEJEKEqFLEMENEOErFPEQEsFtFuFvFREwFSExFyFTEUEzFAFBFVECFWEXEYEZE0E1E2E3E4EDF5E6E7E8EEF9E!EFFGFHFIF#EJF$EKFLF%E'EMFNFOF(EPF)E*E+E,E-E.E/E:E;EQF=E?E@E[ERF]E^ESFTFGk8l7zTkgCiCagcEJoKoMoFkgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3o5oNmqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:or s =o@o]o_o{o}oapcpoD'CpDqDrDsD(CtDuDvDwDxDyDzDADBDCDDDED)CFDGD
1381 def create_event(self, options: EventOptions | None = None) -> Event:
1382 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`.
1384 Note
1385 ----
1386 Device must be initialized.
1388 Parameters
1389 ----------
1390 options : :obj:`EventOptions`, optional
1391 Customizable dataclass for event creation options.
1393 Returns
1394 -------
1395 :obj:`~_event.Event`
1396 Newly created event object.
1398 """
1399 self._check_context_initialized() 2gBPeQeReSeTeUeVeWeXeYeZe0e*CFpkBlBmBGpnBelrE+CNk,C@kEB?m@m[m]m^m_m7f8f#g$gX Y `m{mClDlwkxkyk9f!fMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsn(f)ftnunw x 1 2 vnwn*f+f,f-fy z xnynFlGlHlznAnBn.f/ffp'g8 9 CnDnIlJlKlLlMl:f;f=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZn^f_f0n1nC D ' ( 2n3n`f{f|f}fE F 4n5nOlPlQl6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n
1400 cdef Context ctx = self._context 2gBPeQeReSeTeUeVeWeXeYeZe0e*CFpkBlBmBGpnBelrE+CNk,C@kEB?m@m[m]m^m_m7f8f#g$gX Y `m{mClDlwkxkyk9f!fMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsn(f)ftnunw x 1 2 vnwn*f+f,f-fy z xnynFlGlHlznAnBn.f/ffp'g8 9 CnDnIlJlKlLlMl:f;f=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZn^f_f0n1nC D ' ( 2n3n`f{f|f}fE F 4n5nOlPlQl6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n
1401 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2gBPeQeReSeTeUeVeWeXeYeZe0e*CFpkBlBmBGpnBelrE+CNk,C@kEB?m@m[m]m^m_m7f8f#g$gX Y `m{mClDlwkxkyk9f!fMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsn(f)ftnunw x 1 2 vnwn*f+f,f-fy z xnynFlGlHlznAnBn.f/ffp'g8 9 CnDnIlJlKlLlMl:f;f=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZn^f_f0n1nC D ' ( 2n3n`f{f|f}fE F 4n5nOlPlQl6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n
1403 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer:
1404 """Allocate device memory from a specified stream.
1406 Allocates device memory of `size` bytes on the specified `stream`
1407 using the memory resource currently associated with this Device.
1409 Note
1410 ----
1411 Device must be initialized.
1413 Parameters
1414 ----------
1415 size : int
1416 Number of bytes to allocate.
1417 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1418 Keyword-only. The stream establishing the stream ordering semantic.
1419 Must be passed explicitly; pass ``self.default_stream`` to use
1420 the default stream.
1422 Returns
1423 -------
1424 :obj:`~_memory.Buffer`
1425 Newly created buffer object.
1427 """
1428 self._check_context_initialized() 2=k?k5z`lml(j)j*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjk
1429 return self.memory_resource.allocate(size, stream=stream) 2=k?k5z`lml(j)j*j+j,jS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[j6j5e%g7j]j3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8j9j(g!jckdkekfkgkhkikjk
1431 def sync(self) -> None:
1432 """Synchronize the device.
1434 Note
1435 ----
1436 Device must be initialized.
1438 """
1439 self._check_context_initialized() 2QpRp*A+A,A-A=k?k;yUk=yVkxEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^EGk8l:k;kflTk
1440 handle_return(runtime.cudaDeviceSynchronize()) 2QpRp*A+A,A-A=k?k;yUk=yVkxEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^EGk8l:k;kflTk
1442 def create_graph_builder(self) -> GraphBuilder:
1443 """Create a new :obj:`~graph.GraphBuilder` object.
1445 Returns
1446 -------
1447 :obj:`~graph.GraphBuilder`
1448 Newly created graph builder object.
1450 """
1451 from cuda.core.graph._graph_builder import GraphBuilder 2dBnlWkeBXkolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-khEiEjEoEpEqE;w=w?w@w[wjlNxOxPxkElEmE5C6C7C.kqlrlsltlul0z/k
1453 self._check_context_initialized() 2dBnlWkeBXkolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-khEiEjEoEpEqE;w=w?w@w[wjlNxOxPxkElEmE5C6C7C.kqlrlsltlul0z/k
1454 return GraphBuilder._init(stream=self.create_stream(), is_stream_owner=True) 2dBnlWkeBXkolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-khEiEjEoEpEqE;w=w?w@w[wjlNxOxPxkElEmE5C6C7C.kqlrlsltlul0z/k
1457cdef inline int Device_ensure_cuda_initialized() except? -1:
1458 """Initialize CUDA driver and check version compatibility (once per process)."""
1459 global _is_cuInit
1460 if _is_cuInit is False: 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6snESb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1461 with _lock, nogil:
1462 HANDLE_RETURN(cydriver.cuInit(0))
1463 _is_cuInit = True
1464 try:
1465 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1466 except ImportError:
1467 pass
1468 else:
1469 warn_if_cuda_major_version_mismatch()
1470 return 0 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6snESb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1473cdef inline int Device_resolve_device_id(device_id) except? -1:
1474 """Resolve device_id, defaulting to current device or 0."""
1475 cdef cydriver.CUdevice dev
1476 cdef cydriver.CUcontext ctx
1477 cdef cydriver.CUresult err
1478 if device_id is None: 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6snESb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1479 with nogil: 2a ~f.C/CdBnlWkeBXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmw:CSpTpUpVpQmgB;C=CRmSmTmUmVmWpXpYpZp0p1p2p3prpsp)e6e8dPeQeAd*e7e9dReSeBd+e8e!dTeUeCd,e9e#dVeWeDd-e!e$dXeYeEd.e#e%dZe0eFdtp4pupvpwpxpypzpApBpCpDp?C@CEp*CFpkBlBmBGpnBQkRkdpepelWmXmHp[CYmZm0m_z1m2m;w7l=w?w@w/y[wjlNxOxPxID.kql3mrlsltlul0z/k/e:eJD;e=e?e@e[e^n]e$e1e^e%e]C_e^C'e`e{e|eLp}e~eafbfcfdf1z9l!l#lk IkJk$l%l'l(l)l*l+l,l(e-l.l/l:l;lKk=l?lLk@l[ll _C`C{C|C}C~CMp5p=k?k+CaD8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTy4zlzCB!wDBllG Nk,C@kEBbDcDdDeDfDgDRlhDiDjDkDlDmDnDylvk;yUkkl9CIp;zWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbAcAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!AvlzlGkTD4m2e5mSl6mTlUl7m8m8l:k;kfl0wVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lImJmKm7z3ePp6pTk9g6l8wgllo9wgCiChlwlJeewil4e_nSb-CTb+mUb,mVb6DWb7DXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDe{wEeydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonw'A8DoD'CpDqDrDsD(CtDuDvDwDxDyDzDADBDCDDD[zED)CFDGDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6g
1480 err = cydriver.cuCtxGetDevice(&dev) 2a ~f.C/CdBnlWkeBXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmw:CSpTpUpVpQmgB;C=CRmSmTmUmVmWpXpYpZp0p1p2p3prpsp)e6e8dPeQeAd*e7e9dReSeBd+e8e!dTeUeCd,e9e#dVeWeDd-e!e$dXeYeEd.e#e%dZe0eFdtp4pupvpwpxpypzpApBpCpDp?C@CEp*CFpkBlBmBGpnBQkRkdpepelWmXmHp[CYmZm0m_z1m2m;w7l=w?w@w/y[wjlNxOxPxID.kql3mrlsltlul0z/k/e:eJD;e=e?e@e[e^n]e$e1e^e%e]C_e^C'e`e{e|eLp}e~eafbfcfdf1z9l!l#lk IkJk$l%l'l(l)l*l+l,l(e-l.l/l:l;lKk=l?lLk@l[ll _C`C{C|C}C~CMp5p=k?k+CaD8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTy4zlzCB!wDBllG Nk,C@kEBbDcDdDeDfDgDRlhDiDjDkDlDmDnDylvk;yUkkl9CIp;zWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbAcAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!AvlzlGkTD4m2e5mSl6mTlUl7m8m8l:k;kfl0wVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lImJmKm7z3ePp6pTk9g6l8wgllo9wgCiChlwlJeewil4e_nSb-CTb+mUb,mVb6DWb7DXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDe{wEeydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonw'A8DoD'CpDqDrDsD(CtDuDvDwDxDyDzDADBDCDDD[zED)CFDGDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6g
1481 if err == cydriver.CUresult.CUDA_SUCCESS: 2a ~f.C/CdBnlWkeBXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmw:CSpTpUpVpQmgB;C=CRmSmTmUmVmWpXpYpZp0p1p2p3prpsp)e6e8dPeQeAd*e7e9dReSeBd+e8e!dTeUeCd,e9e#dVeWeDd-e!e$dXeYeEd.e#e%dZe0eFdtp4pupvpwpxpypzpApBpCpDp?C@CEp*CFpkBlBmBGpnBQkRkdpepelWmXmHp[CYmZm0m_z1m2m;w7l=w?w@w/y[wjlNxOxPxID.kql3mrlsltlul0z/k/e:eJD;e=e?e@e[e^n]e$e1e^e%e]C_e^C'e`e{e|eLp}e~eafbfcfdf1z9l!l#lk IkJk$l%l'l(l)l*l+l,l(e-l.l/l:l;lKk=l?lLk@l[ll _C`C{C|C}C~CMp5p=k?k+CaD8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTy4zlzCB!wDBllG Nk,C@kEBbDcDdDeDfDgDRlhDiDjDkDlDmDnDylvk;yUkkl9CIp;zWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbAcAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!AvlzlGkTD4m2e5mSl6mTlUl7m8m8l:k;kfl0wVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5lImJmKm7z3ePp6pTk9g6l8wgllo9wgCiChlwlJeewil4e_nSb-CTb+mUb,mVb6DWb7DXbagYbgf`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDe{wEeydzdfogohflChoiojoif?zjfkflfmfnfofpfqfyCrfsftfuf@zvfkonw'A8DoD'CpDqDrDsD(CtDuDvDwDxDyDzDADBDCDDD[zED)CFDGDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6g
1482 return int(dev) 2.C/CdBnlWkeBXkPmolplYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k-m(k)k*k+k,k-klwmw:CSpTpUpVpQmgB;C=CRmSmTmUmVmWpXpYpZp0p1p2p3prpsp)e6e8dPeQeAd*e7e9dReSeBd+e8e!dTeUeCd,e9e#dVeWeDd-e!e$dXeYeEd.e#e%dZe0eFdtp4pupvpwpxpypzpApBpCpDp?C@CEp*CFpkBlBmBGpnBQkRkdpepelWmXmHp[CYmZm0m_z1m2m;w7l=w?w@w/y[wjlNxOxPxID.kql3mrlsltlul0z/k/e:eJD;e=e?e@e[e^n]e$e1e^e%e]C_e^C'e`e{e|eLp}e~eafbfcfdf1z9l!l#lk IkJk$l%l'l(l)l*l+l,l(e-l.l/l:l;lKk=l?lLk@l[ll _C`C{C|C}C~C+CaD,CEBbDcDdDeDfDgDRlhDiDjDkDlDmDnDylvk;ykl9CIp;zWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=y|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!AvlzlGkTD4m5mSl6mTlUl7m8m8l:k;kflVl8hAlBkWl9hXl!hYl#hZl$hOp7g0l]l9m?y1l1w!m2wfw3wgw4w#m5wLx6w$m7w%m%h2lCkhw'hiw(h'm)h(m*h3l8gjwMk+h)m*mBl4l5l7zPp6pTk9g6l8wgllo9wgCiChlwlewil_nSb-CTb+mUb,mVb6DWb7DXbagYb`n{n|n}n~naobocodoeoZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc'dMc(dNcOc)dPc*dQcIdJdg c h d X Y +d,d-d.d/d:d;d) H * I o m p n KdLdZ u 0 v Md=d?d+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_d`d1c{d2cRdSd: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%c|d}d[ J ] K Td'cUd(cVdWdi e j f 8 9 ~daebecedeeefe^ L _ M )c! *c# XdYd$ A % B Zdgehe` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dlemene[coe]c4d5dab^c_cbbE F cb`c{c|c}c~caddbebbdcdddpeqefbN gbO edfdregdsehdidjdkd6dld7dmdtendueodvepdweqdxerdyesdzetdAeudBevdCewdxdDe{wEeydzdfogolChoiojoyCkonw'A8DoD'CpDqDrDsD(CtDuDvDwDxDyDzDADBDCDDD[zED)CFDGDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fmznzozpzqzrzsztzuzvzwzxz8z9z
1483 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1484 with nogil: 2a ~fMp5p=k?k8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTy4zlzCB!wDBllG Nk@kUkhbibjbkbVk{l|l}l~lambmcmdmemfmgmhmim6zjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm2e0wImJmKm3eJe4egfhfif?zjfkflfmfnfofpfqfrfsftfuf@zvfIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g
1485 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a ~fMp5p=k?k8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTy4zlzCB!wDBllG Nk@kUkhbibjbkbVk{l|l}l~lambmcmdmemfmgmhmim6zjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm2e0wImJmKm3eJe4egfhfif?zjfkflfmfnfofpfqfrfsftfuf@zvfIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g
1486 assert <void*>(ctx) == NULL 2a ~fMp5p=k?k8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTy4zlzCB!wDBllG Nk@kUkhbibjbkbVk{l|l}l~lambmcmdmemfmgmhmim6zjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm2e0wImJmKm3eJe4egfhfif?zjfkflfmfnfofpfqfrfsftfuf@zvfIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g
1487 return 0 # cudart behavior 2a ~fMp5p=k?k8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTy4zlzCB!wDBllG Nk@kUkhbibjbkbVk{l|l}l~lambmcmdmemfmgmhmim6zjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm2e0wImJmKm3eJe4egfhfif?zjfkflfmfnfofpfqfrfsftfuf@zvfIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g
1488 else:
1489 HANDLE_RETURN(err)
1490 elif device_id < 0: 2a _p`p{p|pWk}p~pXkaqbqcqdqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNqOqPqQqSpRqTpSqUpTqVpUqVqWqXqYq}vZq~v0q1q2q3q4q5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrMrcwNrOr4pPrdwQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjBFp7rkB8r9r!rGp#rnB$rQk%rRk'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzpBYz.k}r~rasbscsdsesqB/kfs/e:egs.D;ekw=e`z?e@e[ehs]e$e1e^e%e_e'e`e/D{e|eLp}e~eafbfcfdfismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_lkslsmsnsospsrB=k?ksBtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzBQx:AAB(DBBrsEBssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsklKBLBFsMBlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff(j)jOBPBQBRBGsHsvl)D6hSBSD*D7h+DJpTBUBVBIsWBJsXBKsLsYBZB0B1BMsNs2B3B4BOs5B6B7B8B9B!B#B$B%B'B(B)BPs*B+BQs,B-B.BRs/BSs:B;B=B?BTsUsVs@B[BWs]B^BXsYs_BZs0s`B{B|B}B1s~B2s3saCKpbCcC4sdCeCfCgChCiCjChl5sUDVD^wWDXDYDZD0D1D2D3D4D5D6snESb-CTb7sUb8sVbWbXbag9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyvHkzvAvBv'CCvDvEvFvGv(CHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1491 raise ValueError(f"device_id must be >= 0, got {device_id}")
1492 return device_id 2a _p`p{p|pWk}p~pXkaqbqcqdqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNqOqPqQqSpRqTpSqUpTqVpUqVqWqXqYq}vZq~v0q1q2q3q4q5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrMrcwNrOr4pPrdwQriBRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6rjBFp7rkB8r9r!rGp#rnB$rQk%rRk'r(r)r*r+r,r-r.r/r:r;r=roB?r@r[r]r^r_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzpBYz.k}r~rasbscsdsesqB/kfs/e:egs.D;ekw=e`z?e@e[ehs]e$e1e^e%e_e'e`e/D{e|eLp}e~eafbfcfdfismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_lkslsmsnsospsrB=k?ksBtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzBQx:AAB(DBBrsEBssFBGBHBIBtsusvsJBwsxsyszsAsBsCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsklKBLBFsMBlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff(j)jOBPBQBRBGsHsvl)D6hSBSD*D7h+DJpTBUBVBIsWBJsXBKsLsYBZB0B1BMsNs2B3B4BOs5B6B7B8B9B!B#B$B%B'B(B)BPs*B+BQs,B-B.BRs/BSs:B;B=B?BTsUsVs@B[BWs]B^BXsYs_BZs0s`B{B|B}B1s~B2s3saCKpbCcC4sdCeCfCgChCiCjChl5sUDVD^wWDXDYDZD0D1D2D3D4D5D6sSb-CTb7sUb8sVbWbXbag9sYb!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6u7u8umC9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbvcvdvevfvgvhvivjvkvvClvwCmvnvovxCzCpvACBCqvrvsvCCtvuvvvwvDCxvyvHkzvAvBv'CCvDvEvFvGv(CHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1495cdef inline list Device_ensure_tls_devices(cls):
1496 """Ensure thread-local Device singletons exist, creating if needed."""
1497 cdef int total
1498 try: 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6sSb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1499 return _tls.devices 2a ~f.C_p/C`pdB{pnl|pWk}peB~pXkaqPmbqolcqpldqYkeqZkfq0kgq1khq2kiq3kjq4kkq5klq6kmq7knq8koq9kpq!kqq#krq$ksq%ktq'kuq-mfB(kvq)kwq*kxq+kyq,kzq-kAqlwBqmwCqRxDqEq:wSxFqGqTxHqUxIqVxJq)g*g+gKq,g-g.gWxLqMqNq:COqPqQqSpRqTpSqUpTqVpUqQmVqgBWq;CXq=CYq}vZq~v0qRm1qSm2qTm3qUm4qVm5qWphBXp6qYp7qZp8q0p9q1p!q2p#q3p$qaw%q'q(q)qXx*qYx+qZx,q0x-q1x.q2x/qrp:qsp;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrbwJr3xKr4xLrtpMrcwNrOr4pPrdwQrupiBvpRrwpSrxpTrypUrzpVrWrXrYrZrAp0rBp1rCp2rDp3r?C4r@C5rEp6r*CjBFp7rkB8rlB9rmB!rGp#rnB$rQk%rRk'rdp(rep)rel*rWm+rXm,rHp-r[C.r/rYm:rZm;r0m=r_zoB1m?r@r[r]r^r2m_r`r{r|rCzDzEzFzGzHz;wIz7l5h=wJz?wKz@wLz/yMz[wNzjlOzNxPzOxQzPxRzSzTzUz5CVz6CWz7CXzIDpBYz.k}rql~r3masrlbsslcstldsules0zqB/kfs/e:eJDgs.D;ekw=e`z?e@e[e^nhs]e$e1e^e%e]C_e^C'e`e/D{e|eLp}e~eafbfcfdf1zismo7p9l2z8p3z!l.m9p#l^l!pk !g#pIkowQ pwqwrwswtwuwvwwwxwDkzkJk$p$l%pKD'p(pLD)p*pMD+p,pND-p.pOD/p:pPD;p%l'l(l)l*l+l,l(e-l.l/l:l/m=p;lt Kk:m?p=lxl@p?l]wQDRDjsAkLkUyywVyzw:y[p@l!z]p[l;m^pl QpAwRpBw*ACw+AR ,ADw-AEw_l_Cks`Cls{Cms|Cns}Cos~CpsrBMp5p=k?k+CsBaDtB.AuB#DvB#zwB$DxB/Aqs=m%DyB'DzB8Ckk5x6x7x|w$w}wyz8x9x^zSk~w!xlk#x$x%w'w%x'xax(x)x%j*x(w+x,x-x.xbx)wcx#jdxexfx/xgxhx*w:x+wmk;xzz=x?x@x[x]xnk^x_x`x{x|x}x~xayixbyjxkxokcylxpkdyeymxnxfygyhyiyjyoxpxkyqxqklyrxmyrknyoysxtxpyskqyryuxvxsytywxuyxxvyyxzxAxwyxyyyzyAzAyByCyDyEyFyGyHyIy,wtk-wJyKyukBx'jBzCxDxLyMyExNyOy.wPyQyRy/wSyTyQx4z:AAB(DBBlzCB!wDBllG Nk,Crs@kEBssbDFBcDGBdDHBeDIBfDtsgDusRlvshDJBiDwsjDxskDyslDzsmDAsnDBsylCs$z%z'z(z)z*z+z,zno-z.z/z:zooAgBg5zb `lGdmlHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsvk;yUkkl9CKBLBIpFs;zMBWyXyYyZy0yhb1y2y3y4y5yib6y7y8y9yjb!y#y$y%y'y(y)y*y+y,ykb-y.yNBlbmbnb!CobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbNpefff{z=yVk|z}z~zaAbA(j)jOBPBQBRBGsHscAdA{leA|lfAgAhA}liAjA~lamkAbmlAmAnAoAcmpAdmemqArAsAtAuAvAfmwAxAgmhmim6zyAjmzAAABACAkmDAEAFAGAlmHAIAJAmmKALAnmompmMAqmNArmsmOAPAQARAtmumSAvmwmTAUAVAxmWAymXAzmYAZA0AAm1ABm2A3A4ACm5A6A7ADmEm8AFmGmHm9A!Avlzl)D6hGkSBSD*D7h+DJpTDTBUB4m2e5mVBSlIs6mWBTlJsUlXB7mKs8mLs8lYB:kZB;k0Bfl1B0wVlMs8hNsAl2BBk3BWl4B9hOsXl5B!h6BYl7B#h8BZl9B$h!BOp#B7g$B0l%B]l'B9m(B?y)B1lPs1w*B!m+B2wQsfw,B3w-Bgw.B4wRs#m/B5wSsLx:B6w;B$m=B7w?B%mTs%hUs2lVsCk@Bhw[B'hWsiw]B(h^B'mXs)hYs(m_B*hZs3l0s8g`Bjw{BMk|B+h}B)m1s*m~BBl2s4l3s5laCKpImJmKm7z3ePp6pbCTkcC9g6l8w4sgldCloeC9wfCgChCiCjChlwlJeew5sil4eUDVD^wWDXDYDZD0D1D2D3D4D5D_n6sSb-CTb+m7sUb,m8sVb6DWb7DXbag9sYbgf`n!s{n#s|n$s}n%s~n'sao(sbo)sco*sdo+seo,sZb0b1b2b3b4b5b6b7b8b9b!b#bFx$bGx%bHx'bIx(bJx)bKx*bIw+bJw,bKw-bLw.bMw/bNw:bOw;bPw=bQw?bRw@bSw[bTw]bUw^bVw_bWw`bXw{bYw|bZw}b#C~b$Cac@ybc[ycc]ydc^yec_yfc`ygc{yhc|yic}yjc~ykcazlcbzmcczncdzocezpcfzqcgzrchzsciztcjzuckzvc%Cwc;Axc=Ayc?Azc@AAc[ABc]A_w^ACc_A`w`ADc{AEc|AFc}AGc~AHcaBIcbBJccBKcLc#A$jFw$AGwZz%AHw,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictkCdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkiliminiMx%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXo=zYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 fp'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3u{wEe4j5jydzd4ucp5u6ufo7ugo8uhflCmCho9unC!uoC#u$u%upCqC'u(u)u*u+u,u-urC.u/u:u;u=u?usC@u[u]utC^u_u`u{u|uuC}u~uavbviocvjodvif?zjfkfevfvgvhvivjvkvvClvwCmvnvovxClfmfnfofpfqfyCzCrfsftfuf@zvfkopvACBCqvrvsvCCtvuvvvwvnwDCxvyvHk'Azv8DAvoDBv'CCvpDDvqDEvrDFvsDGv(CHvtDIvuDJvvDKvwDLvxDMvyDNvzDOvADPvBDQvCDRvDDSv[zTvEDUv)CVvFDWvGDXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6fEC1v2v3vFCGCHCICJCKCLC4v5v6v7vMCNCOCPCQC8v9v!v#v$vIgJgmznzKgLgMgNgOgozPgQgRgpzSgqzTgrzUgVgszWgtzXguzYgvzZgwzxz0g1g2g3g4g8z5g9z6gRC%vSC]zTC'vUCVCWC(v)vXCYC*v+vZC,v-v.v/v:v0C;v1C=v?v@v[v]v^v_v2C`v{v3C|v
1500 except AttributeError: 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1501 with nogil: 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1502 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1503 devices = _tls.devices = [] 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1504 for dev_id in range(total): 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1505 device = super(Device, cls).__new__(cls) 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1506 device._device_id = dev_id 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1507 device._memory_resource = None 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1508 device._has_inited = False 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1509 device._properties = None 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1510 device._resources = None 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1511 device._uuid = None 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1512 device._context = None 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1513 devices.append(device) 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v
1514 return devices 2a ~f_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEq:wFqGqHqIqJq)g*g+gKq,g-g.gLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q)e6e8d/gPeQe:g=q?q@q[qAd;g=g?g@g[g]q^q*e7e9d]gReSe^g_q`q{q|qBd_g`g{g|g}g}q~q~gahbharchdhehfhghhhihjhkh+e8e!dlhTeUemhbrcrdrerCdnhohphqhrhfrgr,e9e#dshVeWethhrirjrkrDduhvhwhxhyhlrmr-e!e$dzhXeYeAhnrorprqrEdBhChDhEhFhrrsr.e#e%dGhZe0eHhtrurvrwrFdIhJhKhLhMhxryrNhOhPhQhRhShThUhVhWhXhYhzrZh0h1h2h3h4hArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r5h}r~rasbscsdsesfs/e:egs;e=e?e@e[ehs]e$e1e^e%e_e'e`e{e|e}e~eafbfcfdfismo.m^lk !gQ Dk/mt :mxl]w;ml QpRpR _lkslsmsnsospsqs=mkkSklk%j#jmknkokpkqkrksktkuk'jllG Nkrs@ksstsusvswsxsyszsAsBsCsnoooAgBgb GdHdCgDgEgDsFgGgHgpoqorosotouovowoxoyozoAoBoCoDoEoFoGoEsUkFshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbefffVk(j)jGsHs{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHm6h7h2eIsJsKsLs0wMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3sImJmKm3e4sJe5s4e^w6sSbTb7sUb8sVbWbXb9sYbgf!s#s$s%s's(s)s*s+s,sZb0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLc,h*j'd-sHoIo-h?m@m[m.h.s/s:s;sMc(d/h:hNc=sJo?s@s+jOcKo;h,j)d[sLo[k=h]m^m_m?h]s^s_s`sPc*d@h[hQc{sMo|s}sId7f8f]h^h_h`hJd{h|h}h~hS g -jT #g$gU .j/j:j;jc h =jV W d ?j@j[jX Y +d,d-d.d/dai:dbi`m{mci~satbt;ddieictdtbg6j) NocgClDldgOoPoQoRoH * SoegfgI ToUoVoKe5eo ]kEkLewkxkykMe^k_k`k{km p |kNeOen }kFk~kalfiKd9f!fgihiiijiLdkilimini%gZ |mEl#f}m~m$fanbncndnu 0 en%f'fv fngnhninjnknlnmnnnonpnqnrnsnMd(f)foipiqirisitiuivi=detwitnunxiftgtht?dyiziitjtktltmtntotptqtrtsttt+ RcSc, w x - TcUcVcWcXc. / YcZc0cNd1 2 Od@d[d]dPdQd^d_dAi`dutBivnwnCivtwtxtyt1c{dDiEi2cztAtBtRd*f+fFiGiHiIiJiSd,f-fKiLiMiNiOiPi: 3c4c; y z = 5c6c7c8c9c!c? @ #c$c%cQi|dRixnynSiCtDtEt}dTiUiFtGtgg7j[ WoLmhgFlGlHligXoYoZoJ ] 0ojgkgK 1o2o3oHtVi]jTdIt4oJtWiznAnBnXiKtLtMtNt'cUdYiZi(cOt5oPtQtVd.f/f0i1i2i3iWd4i5i6i7i3 i ^j4 'g5 _j`j{j|je j }j6 7 f ~jakbk8 9 ~daebecede8iee9iCnDn!iRtStTtfe#i$iUtVtWtlg8j^ 6omgIlJlng7o8o9o!oL _ #oogpgM $o%o'ovg9j)cgpMmwgKlLlMlxghpipjpkp! *clpygzg# mpNmnpop%iXd:f;f'i(i)i*iYd+i,i-i.i=f(g$ EnNl?fFnGn@fHnInJnKnA % Ln[f]fB MnNnOnPnQnRnSnTnUnVnWnXnYnZnZd^f_f/i:i;i=i?i@i[i]igeXt^i0n1n_iYtZt0the`i{i1t2t3t4t5t6t7t8t9t!t#t$t` +c,c{ C D | -c.c/c:c;c} ~ =c?c@c0d' ( 1diejeke2d3dleme|ine%t}i2n3n~i't(t)t*t[coeajbj]c+t,t-t4d`f{fcjdjejfjgj5d|f}fhjijjjkjljmjab^c_cbbE F cb`c{c|c}c~caddbebbdcdddnjpeoj4n5npj.t/t:tqeqjrj;t=tqg!jfb(oOmrgOlPlQlsg)o*o+o,oN gb-otgugO .o/o:o?tppqpq P r s edfdsjckre@t;obltj6n7n8nuj[t]t^t_tgdsevjwjhdid`tjdkd{t|t=o}t~txjdk6dau?obuyj9n!n#nzjcudueufuld7dAjBjmdgu@ohuiuCjekteju[oclDj$n%n'nEjkulumunundueFjGjodou]opuquHjfkveru^odlIj(n)n*nJjsutuuuvupdweKjLjqdwu_oxuyuMjgkxezu`oOkNj+n,n-nOjAuBuCuDurdyePjQjsdEu{oFuGuRjhkzeHu|oPkSj.n/n:nTjIuJuKuLutdAeUjVjudMu}oNuOuWjikBePu~oQuXj;n=n?nYjRuSuTuUuvdCeZj0jwdxdVuapWuXu1jjkDeYubpZu2j@n[n]n3j0u1u2u3uEe4j5jydzd4ucp5u6u7u8uhf9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvifjfkfevfvgvhvivjvkvlvmvnvovlfmfnfofpfqfrfsftfufvfpvqvrvsvtvuvvvwvxvyvHkzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeYvZv0v4f5f6f1v2v3v4v5v6v7v8v9v!v#v$vIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v