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

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

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8  

9from cuda.bindings cimport cydriver 

10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN 

11from libcpp.vector cimport vector 

12  

13import threading 

14  

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) 

30  

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 

41  

42from typing import TYPE_CHECKING 

43  

44if TYPE_CHECKING: 

45 import cuda.core.system # no-cython-lint 

46 from cuda.core.graph import GraphBuilder 

47  

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 

53  

54  

55cdef class DeviceProperties: 

56 """ 

57 A class to query various attributes of a CUDA device. 

58  

59 Attributes are read-only and provide information about the device. 

60 """ 

61 cdef: 

62 int _handle 

63 dict _cache 

64  

65 def __init__(self, *args, **kwargs) -> None: 

66 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2UF

67  

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

74  

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

85  

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

91  

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

96  

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

101  

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

106  

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

111  

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

116  

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

121  

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

126  

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

131  

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

136  

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

141  

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

146  

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

151  

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

156  

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 ) 

163  

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

168  

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

173  

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

178  

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

183  

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

188  

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 ) 

195  

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 ) 

202  

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

207  

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

212  

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

217  

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 ) 

224  

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 ) 

231  

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 ) 

238  

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

243  

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

248  

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 ) 

255  

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

260  

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 ) 

267  

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 ) 

274  

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 ) 

281  

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 ) 

288  

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

293  

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

298  

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

303  

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

308  

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

313  

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

318  

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

323  

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 ) 

330  

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

335  

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 ) 

342  

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 ) 

349  

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

354  

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 ) 

361  

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 ) 

368  

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

373  

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

378  

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

383  

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

388  

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

393  

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

398  

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

403  

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

408  

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

413  

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

418  

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

423  

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

428  

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

433  

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

438  

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

443  

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

448  

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

453  

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

458  

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

463  

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

468  

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

473  

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

478  

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

483  

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

488  

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

493  

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 ) 

500  

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 ) 

507  

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

512  

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

517  

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

522  

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 ) 

529  

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

534  

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

539  

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

544  

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 ) 

551  

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 ) 

560  

561 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

562  

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

567  

568 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675) 

569  

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 ) 

576  

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 ) 

585  

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 ) 

594  

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 ) 

603  

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 ) 

612  

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 ) 

619  

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 ) 

628  

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

633  

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 ) 

640  

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

645  

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

650  

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 ) 

659  

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 ) 

666  

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 ) 

673  

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 ) 

680  

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

685  

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

690  

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 ) 

697  

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

702  

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

707  

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 ) 

716  

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

721  

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

726  

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

731  

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

736  

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

741  

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

746  

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

751  

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

756  

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 ) 

763  

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

768  

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

773  

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 ) 

782  

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

787  

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 ) 

794  

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 ) 

801  

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

806  

807 # Start of CUDA 12 device attributes 

808  

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

813  

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

818  

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 ) 

825  

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 ) 

832  

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

837  

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

842  

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

847  

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

852  

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

857  

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

862  

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

867  

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. 

871  

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

875  

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. 

879  

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

883  

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 ) 

892  

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 ) 

899  

900 # Start of CUDA 13 device attributes 

901  

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 ) 

908  

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 ) 

915  

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 ) 

924  

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 ) 

931  

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 ) 

940  

941  

942class Device: 

943 """Represent a GPU and act as an entry point for cuda.core features. 

944  

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. 

948  

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. 

953  

954 Newly returned :obj:`~_device.Device` objects are thread-local singletons 

955 for a specified device. 

956  

957 Note 

958 ---- 

959 Will not initialize the GPU. 

960  

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. 

966  

967 """ 

968 __slots__ = ( 

969 "_device_id", 

970 "_memory_resource", 

971 "_has_inited", 

972 "_properties", 

973 "_resources", 

974 "_uuid", 

975 "_context", 

976 "__weakref__", 

977 ) 

978  

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

982  

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

986  

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

991  

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 ) 

997  

998  

999 @classmethod 

1000 def get_all_devices(cls) -> tuple[Device, ...]: 

1001 """ 

1002 Query the available device instances. 

1003  

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

1012  

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). 

1018  

1019 The devices are mapped to one another by their UUID. 

1020  

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

1027  

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 ) 

1032  

1033 from cuda.core.system import Device as SystemDevice 2!w

1034 return SystemDevice(uuid=self.uuid) 2!w

1035  

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

1040  

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

1046  

1047 def can_access_peer(self, peer: Device | int) -> bool: 

1048 """Check if this device can access memory from the specified peer device. 

1049  

1050 Queries whether peer-to-peer memory access is supported between this 

1051 device and the specified peer device. 

1052  

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) 

1067  

1068 @property 

1069 def uuid(self) -> str: 

1070 """Return a UUID for the device. 

1071  

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. 

1075  

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. 

1080  

1081 The UUID is cached after first access to avoid repeated CUDA API calls. 

1082  

1083 """ 

1084 cdef cydriver.CUuuid uuid 

1085 cdef cydriver.CUdevice dev 

1086 cdef bytes uuid_b 

1087 cdef str uuid_hex 

1088  

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

1101  

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

1114  

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

1120  

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

1122  

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

1129  

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

1139  

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

1144  

1145 @property 

1146 def context(self) -> Context: 

1147 """Return the :obj:`~_context.Context` associated with this device. 

1148  

1149 Note 

1150 ---- 

1151 Device must be initialized. 

1152  

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

1156  

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) 

1177  

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

1179  

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 

1185  

1186 @property 

1187 def default_stream(self) -> Stream: 

1188 """Return default CUDA :obj:`~_stream.Stream` associated with this device. 

1189  

1190 The type of default stream returned depends on if the environment 

1191 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1192  

1193 If set, returns a per-thread default stream. Otherwise returns 

1194 the legacy stream. 

1195  

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

1198  

1199 def __int__(self) -> int: 

1200 """Return device_id.""" 

1201 return self._device_id 2kElEmEID=k?k

1202  

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

1205  

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

1208  

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

1213  

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

1216  

1217 def set_current(self, ctx: Context | None = None) -> Context | None: 

1218 """Set device to be used for GPU executions. 

1219  

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. 

1223  

1224 Providing a `ctx` causes the previous set context to be popped and returned. 

1225  

1226 Parameters 

1227 ---------- 

1228 ctx : :obj:`~_context.Context`, optional 

1229 Optional context to push onto this device's current thread stack. 

1230  

1231 Returns 

1232 ------- 

1233 :obj:`~_context.Context`, optional 

1234 Popped context. 

1235  

1236 Examples 

1237 -------- 

1238 Acts as an entry point of this object. Users always start a code by 

1239 calling this method, e.g. 

1240  

1241 >>> from cuda.core import Device 

1242 >>> dev0 = Device(0) 

1243 >>> dev0.set_current() 

1244 >>> # ... do work on device 0 ... 

1245  

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

1250  

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

1282  

1283 def create_context(self, options: ContextOptions | None = None) -> Context: 

1284 """Create a new :obj:`~_context.Context` object. 

1285  

1286 Note 

1287 ---- 

1288 The newly created context will not be set as current. 

1289  

1290 Parameters 

1291 ---------- 

1292 options : :obj:`~_context.ContextOptions`, optional 

1293 Customizable dataclass for context creation options. 

1294  

1295 Returns 

1296 ------- 

1297 :obj:`~_context.Context` 

1298 Newly created context object. 

1299  

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 

1307  

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 ) 

1312  

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 ) 

1318  

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

1322  

1323 cdef vector[cydriver.CUdevResource] c_resources 

1324 c_resources.resize(len(resources)) 2-DAgBgb `lmlCgDgEgFgGgHgeE

1325  

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

1337  

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

1347  

1348 return Context._from_green_ctx(Context, h_green, self._device_id) 2-DAgBgb `lmlCgDgEgFgGgHg

1349  

1350 def create_stream(self, obj: IsStreamType | None = None, options: object = None) -> Stream: 

1351 """Create a :obj:`~_stream.Stream` object. 

1352  

1353 New stream objects can be created in two different ways: 

1354  

1355 1) Create a new CUDA stream with customizable ``options``. 

1356 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol. 

1357  

1358 Option (2) internally holds a reference to the foreign object 

1359 such that the lifetime is managed. 

1360  

1361 Note 

1362 ---- 

1363 Device must be initialized. 

1364  

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. 

1371  

1372 Returns 

1373 ------- 

1374 :obj:`~_stream.Stream` 

1375 Newly created stream object. 

1376  

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

1380  

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`. 

1383  

1384 Note 

1385 ---- 

1386 Device must be initialized. 

1387  

1388 Parameters 

1389 ---------- 

1390 options : :obj:`EventOptions`, optional 

1391 Customizable dataclass for event creation options. 

1392  

1393 Returns 

1394 ------- 

1395 :obj:`~_event.Event` 

1396 Newly created event object. 

1397  

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

1402  

1403 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer: 

1404 """Allocate device memory from a specified stream. 

1405  

1406 Allocates device memory of `size` bytes on the specified `stream` 

1407 using the memory resource currently associated with this Device. 

1408  

1409 Note 

1410 ---- 

1411 Device must be initialized. 

1412  

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. 

1421  

1422 Returns 

1423 ------- 

1424 :obj:`~_memory.Buffer` 

1425 Newly created buffer object. 

1426  

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

1430  

1431 def sync(self) -> None: 

1432 """Synchronize the device. 

1433  

1434 Note 

1435 ---- 

1436 Device must be initialized. 

1437  

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

1441  

1442 def create_graph_builder(self) -> GraphBuilder: 

1443 """Create a new :obj:`~graph.GraphBuilder` object. 

1444  

1445 Returns 

1446 ------- 

1447 :obj:`~graph.GraphBuilder` 

1448 Newly created graph builder object. 

1449  

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

1452  

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

1455  

1456  

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

1471  

1472  

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

1493  

1494  

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