Coverage for cuda / core / _device.pyx: 93.16%

453 statements  

« prev     ^ index     » next       coverage.py v7.14.0, created at 2026-05-22 01:37 +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, StreamOptions 

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  

42# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python, 

43# but it seems it is very convenient to expose them for testing purposes... 

44_tls = threading.local() 

45_lock = threading.Lock() 

46cdef bint _is_cuInit = False 

47  

48  

49cdef class DeviceProperties: 

50 """ 

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

52  

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

54 """ 

55 cdef: 

56 int _handle 

57 dict _cache 

58  

59 def __init__(self, *args, **kwargs): 

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

61  

62 @classmethod 

63 def _init(cls, handle): 

64 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

65 self._handle = handle 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

66 self._cache = {} 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

67 return self 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

68  

69 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2: 

70 """Retrieve the attribute value directly from the driver.""" 

71 cdef int val 

72 cdef cydriver.CUresult err 

73 with nogil: 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

74 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

75 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

76 return <int>default 

77 HANDLE_RETURN(err) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

78 return val 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

79  

80 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2: 

81 """Retrieve the attribute value, using cache if applicable.""" 

82 if attr not in self._cache: 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvzwzxzyzzzAzBz|k4hCzDzEzFzGzHzIzJzKzLz9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpDxExFxGx'wWw(wHxmkIx)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybycydyeyfygyhyiyqkoz2wjy3wrkkyly~waxbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

83 self._cache[attr] = self._get_attribute(attr, default) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qet AkBk%k( 8gP vpMpDxExFxGx'wWw(wHxmkIx)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybycydyeyfygyhyiyqkoz2wjy3wrkkyly~waxbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

84 return self._cache[attr] 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvzwzxzyzzzAzBz|k4hCzDzEzFzGzHzIzJzKzLz9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpDxExFxGx'wWw(wHxmkIx)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybycydyeyfygyhyiyqkoz2wjy3wrkkyly~waxbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

85  

86 @property 

87 def max_threads_per_block(self) -> int: 

88 """int: Maximum number of threads per block.""" 

89 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2#xdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y

90  

91 @property 

92 def max_block_dim_x(self) -> int: 

93 """int: Maximum block dimension X.""" 

94 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 21x

95  

96 @property 

97 def max_block_dim_y(self) -> int: 

98 """int: Maximum block dimension Y.""" 

99 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 22x

100  

101 @property 

102 def max_block_dim_z(self) -> int: 

103 """int: Maximum block dimension Z.""" 

104 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 23x

105  

106 @property 

107 def max_grid_dim_x(self) -> int: 

108 """int: Maximum grid dimension X.""" 

109 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 25x~k

110  

111 @property 

112 def max_grid_dim_y(self) -> int: 

113 """int: Maximum grid dimension Y.""" 

114 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 26x

115  

116 @property 

117 def max_grid_dim_z(self) -> int: 

118 """int: Maximum grid dimension Z.""" 

119 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 27x

120  

121 @property 

122 def max_shared_memory_per_block(self) -> int: 

123 """int: Maximum shared memory available per block in bytes.""" 

124 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2!xdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y

125  

126 @property 

127 def total_constant_memory(self) -> int: 

128 """int: Memory available on device for constant variables in a CUDA C kernel in bytes.""" 

129 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2qy

130  

131 @property 

132 def warp_size(self) -> int: 

133 """int: Warp size in threads.""" 

134 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2uy

135  

136 @property 

137 def max_pitch(self) -> int: 

138 """int: Maximum pitch in bytes allowed by memory copies.""" 

139 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2mz

140  

141 @property 

142 def maximum_texture1d_width(self) -> int: 

143 """int: Maximum 1D texture width.""" 

144 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2:x

145  

146 @property 

147 def maximum_texture1d_linear_width(self) -> int: 

148 """int: Maximum width for a 1D texture bound to linear memory.""" 

149 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2/x

150  

151 @property 

152 def maximum_texture1d_mipmapped_width(self) -> int: 

153 """int: Maximum mipmapped 1D texture width.""" 

154 return self._get_cached_attribute( 2]w

155 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2]w

156 ) 

157  

158 @property 

159 def maximum_texture2d_width(self) -> int: 

160 """int: Maximum 2D texture width.""" 

161 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2_x

162  

163 @property 

164 def maximum_texture2d_height(self) -> int: 

165 """int: Maximum 2D texture height.""" 

166 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2?x

167  

168 @property 

169 def maximum_texture2d_linear_width(self) -> int: 

170 """int: Maximum width for a 2D texture bound to linear memory.""" 

171 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2^x

172  

173 @property 

174 def maximum_texture2d_linear_height(self) -> int: 

175 """int: Maximum height for a 2D texture bound to linear memory.""" 

176 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2[x

177  

178 @property 

179 def maximum_texture2d_linear_pitch(self) -> int: 

180 """int: Maximum pitch in bytes for a 2D texture bound to linear memory.""" 

181 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2]x

182  

183 @property 

184 def maximum_texture2d_mipmapped_width(self) -> int: 

185 """int: Maximum mipmapped 2D texture width.""" 

186 return self._get_cached_attribute( 2`w

187 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2`w

188 ) 

189  

190 @property 

191 def maximum_texture2d_mipmapped_height(self) -> int: 

192 """int: Maximum mipmapped 2D texture height.""" 

193 return self._get_cached_attribute( 2'j

194 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2'j

195 ) 

196  

197 @property 

198 def maximum_texture3d_width(self) -> int: 

199 """int: Maximum 3D texture width.""" 

200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2|x

201  

202 @property 

203 def maximum_texture3d_height(self) -> int: 

204 """int: Maximum 3D texture height.""" 

205 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2{x

206  

207 @property 

208 def maximum_texture3d_depth(self) -> int: 

209 """int: Maximum 3D texture depth.""" 

210 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2`x

211  

212 @property 

213 def maximum_texture3d_width_alternate(self) -> int: 

214 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported.""" 

215 return self._get_cached_attribute( 2|w

216 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2|w

217 ) 

218  

219 @property 

220 def maximum_texture3d_height_alternate(self) -> int: 

221 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported.""" 

222 return self._get_cached_attribute( 2(j

223 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2(j

224 ) 

225  

226 @property 

227 def maximum_texture3d_depth_alternate(self) -> int: 

228 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported.""" 

229 return self._get_cached_attribute( 2{w

230 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2{w

231 ) 

232  

233 @property 

234 def maximum_texturecubemap_width(self) -> int: 

235 """int: Maximum cubemap texture width or height.""" 

236 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2}x

237  

238 @property 

239 def maximum_texture1d_layered_width(self) -> int: 

240 """int: Maximum 1D layered texture width.""" 

241 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2.x

242  

243 @property 

244 def maximum_texture1d_layered_layers(self) -> int: 

245 """int: Maximum layers in a 1D layered texture.""" 

246 return self._get_cached_attribute( 2[w

247 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2[w

248 ) 

249  

250 @property 

251 def maximum_texture2d_layered_width(self) -> int: 

252 """int: Maximum 2D layered texture width.""" 

253 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2@x

254  

255 @property 

256 def maximum_texture2d_layered_height(self) -> int: 

257 """int: Maximum 2D layered texture height.""" 

258 return self._get_cached_attribute( 2^w

259 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2^w

260 ) 

261  

262 @property 

263 def maximum_texture2d_layered_layers(self) -> int: 

264 """int: Maximum layers in a 2D layered texture.""" 

265 return self._get_cached_attribute( 2_w

266 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2_w

267 ) 

268  

269 @property 

270 def maximum_texturecubemap_layered_width(self) -> int: 

271 """int: Maximum cubemap layered texture width or height.""" 

272 return self._get_cached_attribute( 2}w

273 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2}w

274 ) 

275  

276 @property 

277 def maximum_texturecubemap_layered_layers(self) -> int: 

278 """int: Maximum layers in a cubemap layered texture.""" 

279 return self._get_cached_attribute( 2)j

280 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2)j

281 ) 

282  

283 @property 

284 def maximum_surface1d_width(self) -> int: 

285 """int: Maximum 1D surface width.""" 

286 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2'x

287  

288 @property 

289 def maximum_surface2d_width(self) -> int: 

290 """int: Maximum 2D surface width.""" 

291 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2*x

292  

293 @property 

294 def maximum_surface2d_height(self) -> int: 

295 """int: Maximum 2D surface height.""" 

296 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2(x

297  

298 @property 

299 def maximum_surface3d_width(self) -> int: 

300 """int: Maximum 3D surface width.""" 

301 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2-x

302  

303 @property 

304 def maximum_surface3d_height(self) -> int: 

305 """int: Maximum 3D surface height.""" 

306 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2,x

307  

308 @property 

309 def maximum_surface3d_depth(self) -> int: 

310 """int: Maximum 3D surface depth.""" 

311 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2+x

312  

313 @property 

314 def maximum_surface1d_layered_width(self) -> int: 

315 """int: Maximum 1D layered surface width.""" 

316 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2%x

317  

318 @property 

319 def maximum_surface1d_layered_layers(self) -> int: 

320 """int: Maximum layers in a 1D layered surface.""" 

321 return self._get_cached_attribute( 2%j

322 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2%j

323 ) 

324  

325 @property 

326 def maximum_surface2d_layered_width(self) -> int: 

327 """int: Maximum 2D layered surface width.""" 

328 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2)x

329  

330 @property 

331 def maximum_surface2d_layered_height(self) -> int: 

332 """int: Maximum 2D layered surface height.""" 

333 return self._get_cached_attribute( 25y

334 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 25y

335 ) 

336  

337 @property 

338 def maximum_surface2d_layered_layers(self) -> int: 

339 """int: Maximum layers in a 2D layered surface.""" 

340 return self._get_cached_attribute( 2=w

341 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2=w

342 ) 

343  

344 @property 

345 def maximum_surfacecubemap_width(self) -> int: 

346 """int: Maximum cubemap surface width.""" 

347 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2pk

348  

349 @property 

350 def maximum_surfacecubemap_layered_width(self) -> int: 

351 """int: Maximum cubemap layered surface width.""" 

352 return self._get_cached_attribute( 2@w

353 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2@w

354 ) 

355  

356 @property 

357 def maximum_surfacecubemap_layered_layers(self) -> int: 

358 """int: Maximum layers in a cubemap layered surface.""" 

359 return self._get_cached_attribute( 2?w

360 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2?w

361 ) 

362  

363 @property 

364 def max_registers_per_block(self) -> int: 

365 """int: Maximum number of 32-bit registers available to a thread block.""" 

366 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 29x

367  

368 @property 

369 def clock_rate(self) -> int: 

370 """int: Typical clock frequency in kilohertz.""" 

371 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2Qe,zizG Il}k

372  

373 @property 

374 def texture_alignment(self) -> int: 

375 """int: Alignment requirement for textures.""" 

376 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2oy

377  

378 @property 

379 def texture_pitch_alignment(self) -> int: 

380 """int: Pitch alignment requirement for textures.""" 

381 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2py

382  

383 @property 

384 def gpu_overlap(self) -> bool: 

385 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead.""" 

386 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2Rx

387  

388 @property 

389 def multiprocessor_count(self) -> int: 

390 """int: Number of multiprocessors on device.""" 

391 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2iy~k

392  

393 @property 

394 def kernel_exec_timeout(self) -> bool: 

395 """bool: Specifies whether there is a run time limit on kernels.""" 

396 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2lz

397  

398 @property 

399 def integrated(self) -> bool: 

400 """bool: Device is integrated with host memory.""" 

401 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2kz

402  

403 @property 

404 def can_map_host_memory(self) -> bool: 

405 """bool: Device can map host memory into CUDA address space.""" 

406 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2Fx

407  

408 @property 

409 def compute_mode(self) -> int: 

410 """int: Compute mode (See CUcomputemode for details).""" 

411 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2jz

412  

413 @property 

414 def concurrent_kernels(self) -> bool: 

415 """bool: Device can possibly execute multiple kernels concurrently.""" 

416 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2Jx

417  

418 @property 

419 def ecc_enabled(self) -> bool: 

420 """bool: Device has ECC support enabled.""" 

421 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2Mx

422  

423 @property 

424 def pci_bus_id(self) -> int: 

425 """int: PCI bus ID of the device.""" 

426 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2rk

427  

428 @property 

429 def pci_device_id(self) -> int: 

430 """int: PCI device ID of the device.""" 

431 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2ky

432  

433 @property 

434 def pci_domain_id(self) -> int: 

435 """int: PCI domain ID of the device.""" 

436 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2ly

437  

438 @property 

439 def tcc_driver(self) -> bool: 

440 """bool: Device is using TCC driver model.""" 

441 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2ny

442  

443 @property 

444 def memory_clock_rate(self) -> int: 

445 """int: Peak memory clock frequency in kilohertz.""" 

446 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2nz

447  

448 @property 

449 def global_memory_bus_width(self) -> int: 

450 """int: Global memory bus width in bits.""" 

451 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2Ox

452  

453 @property 

454 def l2_cache_size(self) -> int: 

455 """int: Size of L2 cache in bytes.""" 

456 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2Xx

457  

458 @property 

459 def max_threads_per_multiprocessor(self) -> int: 

460 """int: Maximum resident threads per multiprocessor.""" 

461 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2$xdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw

462  

463 @property 

464 def unified_addressing(self) -> bool: 

465 """bool: Device shares a unified address space with the host.""" 

466 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a ry

467  

468 @property 

469 def compute_capability_major(self) -> int: 

470 """int: Major compute capability version number.""" 

471 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpmkG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe

472  

473 @property 

474 def compute_capability_minor(self) -> int: 

475 """int: Minor compute capability version number.""" 

476 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpIxG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe

477  

478 @property 

479 def global_l1_cache_supported(self) -> bool: 

480 """bool: Device supports caching globals in L1.""" 

481 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2Nx

482  

483 @property 

484 def local_l1_cache_supported(self) -> bool: 

485 """bool: Device supports caching locals in L1.""" 

486 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2Yx

487  

488 @property 

489 def max_shared_memory_per_multiprocessor(self) -> int: 

490 """int: Maximum shared memory available per multiprocessor in bytes.""" 

491 return self._get_cached_attribute( 2$jdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw

492 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2$jdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw

493 ) 

494  

495 @property 

496 def max_registers_per_multiprocessor(self) -> int: 

497 """int: Maximum number of 32-bit registers available per multiprocessor.""" 

498 return self._get_cached_attribute( 2;wjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw

499 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2;wjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw

500 ) 

501  

502 @property 

503 def managed_memory(self) -> bool: 

504 """bool: Device can allocate managed memory on this system.""" 

505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfZx

506  

507 @property 

508 def multi_gpu_board(self) -> bool: 

509 """bool: Device is on a multi-GPU board.""" 

510 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2fy

511  

512 @property 

513 def multi_gpu_board_group_id(self) -> int: 

514 """int: Unique id for a group of devices on the same multi-GPU board.""" 

515 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2gy

516  

517 @property 

518 def host_native_atomic_supported(self) -> bool: 

519 """bool: Link between the device and the host supports all native atomic operations.""" 

520 return bool( 2.w

521 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2.w

522 ) 

523  

524 @property 

525 def single_to_double_precision_perf_ratio(self) -> int: 

526 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance.""" 

527 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2pz

528  

529 @property 

530 def pageable_memory_access(self) -> bool: 

531 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it.""" 

532 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2jy

533  

534 @property 

535 def concurrent_managed_access(self) -> bool: 

536 """bool: Device can coherently access managed memory concurrently with the CPU.""" 

537 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 26e7e8e9e!e#e.ell/e:e;e=e?e@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfnkdfefffRmolSmJlTmKlLlUm@vWl$kVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw5mSl

538  

539 @property 

540 def compute_preemption_supported(self) -> bool: 

541 """bool: Device supports compute preemption.""" 

542 return bool( 2)w

543 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2)w

544 ) 

545  

546 @property 

547 def can_use_host_pointer_for_registered_mem(self) -> bool: 

548 """bool: Device can access host registered memory at the same virtual address as the CPU.""" 

549 return bool( 2Ww

550 self._get_cached_attribute( 2Ww

551 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2Ww

552 ) 

553 ) 

554  

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

556  

557 @property 

558 def cooperative_launch(self) -> bool: 

559 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel.""" 

560 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2Kx~k

561  

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

563  

564 @property 

565 def max_shared_memory_per_block_optin(self) -> int: 

566 """int: Maximum optin shared memory per block.""" 

567 return self._get_cached_attribute( 24y

568 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 24y

569 ) 

570  

571 @property 

572 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

573 """bool: Device accesses pageable memory via the host's page tables.""" 

574 return bool( 23w

575 self._get_cached_attribute( 23w

576 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 23w

577 ) 

578 ) 

579  

580 @property 

581 def direct_managed_mem_access_from_host(self) -> bool: 

582 """bool: The host can directly access managed memory on the device without migration.""" 

583 return bool( 2!j

584 self._get_cached_attribute( 2!j

585 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2!j

586 ) 

587 ) 

588  

589 @property 

590 def virtual_memory_management_supported(self) -> bool: 

591 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs.""" 

592 return bool( 25w{k^oJeKe}nsl

593 self._get_cached_attribute( 25w{k^oJeKe}nsl

594 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 25w{k^oJeKe}nsl

595 ) 

596 ) 

597  

598 @property 

599 def handle_type_posix_file_descriptor_supported(self) -> bool: 

600 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

601 return bool( 2Ppk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew#jfwQ gwhwp q r s

602 self._get_cached_attribute( 2Ppk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew#jfwQ gwhwp q r s

603 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2Ppk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew#jfwQ gwhwp q r s

604 ) 

605 ) 

606  

607 @property 

608 def handle_type_win32_handle_supported(self) -> bool: 

609 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

610 return bool( 2,w

611 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2,w

612 ) 

613  

614 @property 

615 def handle_type_win32_kmt_handle_supported(self) -> bool: 

616 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate.""" 

617 return bool( 2Zw

618 self._get_cached_attribute( 2Zw

619 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2Zw

620 ) 

621 ) 

622  

623 @property 

624 def max_blocks_per_multiprocessor(self) -> int: 

625 """int: Maximum number of blocks per multiprocessor.""" 

626 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 24x

627  

628 @property 

629 def generic_compression_supported(self) -> bool: 

630 """bool: Device supports compression of memory.""" 

631 return bool( 2?v

632 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2?v

633 ) 

634  

635 @property 

636 def max_persisting_l2_cache_size(self) -> int: 

637 """int: Maximum L2 persisting lines capacity setting in bytes.""" 

638 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 28x

639  

640 @property 

641 def max_access_policy_window_size(self) -> int: 

642 """int: Maximum value of CUaccessPolicyWindow.num_bytes.""" 

643 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 20x

644  

645 @property 

646 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

647 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate.""" 

648 return bool( 2Yw

649 self._get_cached_attribute( 2Yw

650 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2Yw

651 ) 

652 ) 

653  

654 @property 

655 def reserved_shared_memory_per_block(self) -> int: 

656 """int: Shared memory reserved by CUDA driver per block in bytes.""" 

657 return self._get_cached_attribute( 2ax

658 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2ax

659 ) 

660  

661 @property 

662 def sparse_cuda_array_supported(self) -> bool: 

663 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays.""" 

664 return bool( 2bx

665 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2bx

666 ) 

667  

668 @property 

669 def read_only_host_register_supported(self) -> bool: 

670 """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.""" 

671 return bool( 2~w

672 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2~w

673 ) 

674  

675 @property 

676 def memory_pools_supported(self) -> bool: 

677 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs.""" 

678 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpDpEpFpGpHpIpJpKpvxwxxxyxzxAx(e6e.gReSe/gAd:g;g=g?g@g)e7e[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8ekhVeWelhCdmhnhohphqh+e9erhXeYeshDdthuhvhwhxh,e!eyhZe0ezhEdAhBhChDhEh-e#eFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3hBxCxLpsptpFkGkqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLzPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewcydfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw*h5mrlSl+hwp4efwQ gwMzhw,h-h.h/h:h;h=h?h@h[hId7f8f]h^h_h`hJd{h|h}h~hR S T U V aibicidieibgcgdgegfgLeMeNeOePefiKd9f!fgihiiijiLdkilimini#f$f%f'f(fMd)f*foipiNzqirisitiuiviwixiyi+ , - . / OdPdQdziAiBiCiDiRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: ; = ? @ PiQiRiSiTigghgigjgkgUiViWiXiYiVd/f:fZi0i1i2iWd3i4i5i6i2 3 4 5 6 7i8i9i!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}i~iaj4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljabbbcbdbebmjnjojpjqjqgrgsgtgugp q r s rjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j`A{A

679  

680 @property 

681 def gpu_direct_rdma_supported(self) -> bool: 

682 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information).""" 

683 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2Px}nsl

684  

685 @property 

686 def gpu_direct_rdma_flush_writes_options(self) -> int: 

687 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum.""" 

688 return self._get_cached_attribute( 2*w

689 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2*w

690 ) 

691  

692 @property 

693 def gpu_direct_rdma_writes_ordering(self) -> int: 

694 """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.""" 

695 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2Qx

696  

697 @property 

698 def mempool_supported_handle_types(self) -> int: 

699 """int: Handle types supported with mempool based IPC.""" 

700 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2dy

701  

702 @property 

703 def deferred_mapping_cuda_array_supported(self) -> bool: 

704 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.""" 

705 return bool( 2Xw

706 self._get_cached_attribute( 2Xw

707 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2Xw

708 ) 

709 ) 

710  

711 @property 

712 def numa_config(self) -> int: 

713 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum.""" 

714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2qk

715  

716 @property 

717 def numa_id(self) -> int: 

718 """int: NUMA node ID of the GPU memory.""" 

719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2oz

720  

721 @property 

722 def multicast_supported(self) -> bool: 

723 """bool: Device supports switch multicast and reduction operations.""" 

724 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2hy

725  

726 @property 

727 def surface_alignment(self) -> int: 

728 """int: Surface alignment requirement in bytes.""" 

729 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2my

730  

731 @property 

732 def async_engine_count(self) -> int: 

733 """int: Number of asynchronous engines.""" 

734 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2Dx

735  

736 @property 

737 def can_tex2d_gather(self) -> bool: 

738 """bool: True if device supports 2D texture gather operations, False if not.""" 

739 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Gx

740  

741 @property 

742 def maximum_texture2d_gather_width(self) -> int: 

743 """int: Maximum 2D texture gather width.""" 

744 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2=x

745  

746 @property 

747 def maximum_texture2d_gather_height(self) -> int: 

748 """int: Maximum 2D texture gather height.""" 

749 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2;x

750  

751 @property 

752 def stream_priorities_supported(self) -> bool: 

753 """bool: True if device supports stream priorities, False if not.""" 

754 return bool( 2cx

755 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2cx

756 ) 

757  

758 @property 

759 def can_flush_remote_writes(self) -> bool: 

760 """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.""" 

761 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2Ex

762  

763 @property 

764 def host_register_supported(self) -> bool: 

765 """bool: Device supports host memory registration via cudaHostRegister.""" 

766 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2Vx

767  

768 @property 

769 def timeline_semaphore_interop_supported(self) -> bool: 

770 """bool: External timeline semaphore interop is supported on the device.""" 

771 return bool( 24w

772 self._get_cached_attribute( 24w

773 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 24w

774 ) 

775 ) 

776  

777 @property 

778 def cluster_launch(self) -> bool: 

779 """bool: Indicates device supports cluster launch.""" 

780 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2Hx

781  

782 @property 

783 def can_use_64_bit_stream_mem_ops(self) -> bool: 

784 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs.""" 

785 return bool( 2'w

786 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2'w

787 ) 

788  

789 @property 

790 def can_use_stream_wait_value_nor(self) -> bool: 

791 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs.""" 

792 return bool( 2(w

793 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2(w

794 ) 

795  

796 @property 

797 def dma_buf_supported(self) -> bool: 

798 """bool: Device supports buffer sharing with dma_buf mechanism.""" 

799 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2ok

800  

801 # Start of CUDA 12 device attributes 

802  

803 @property 

804 def ipc_event_supported(self) -> bool: 

805 """bool: Device supports IPC Events.""" 

806 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2Wx

807  

808 @property 

809 def mem_sync_domain_count(self) -> int: 

810 """int: Number of memory domains the device supports.""" 

811 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2by

812  

813 @property 

814 def tensor_map_access_supported(self) -> bool: 

815 """bool: Device supports accessing memory using Tensor Map.""" 

816 return bool( 2*jwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f

817 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2*jwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f

818 ) 

819  

820 @property 

821 def handle_type_fabric_supported(self) -> bool: 

822 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate().""" 

823 return bool( 2+w

824 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2+w

825 ) 

826  

827 @property 

828 def unified_function_pointers(self) -> bool: 

829 """bool: Device supports unified function pointers.""" 

830 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2sy

831  

832 @property 

833 def mps_enabled(self) -> bool: 

834 """bool: Indicates if contexts created on this device will be shared via MPS.""" 

835 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2ey

836  

837 @property 

838 def host_numa_id(self) -> int: 

839 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA.""" 

840 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2k XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)lUxLl#h5g$h%h'h(h6g)h7g|n`k

841  

842 @property 

843 def d3d12_cig_supported(self) -> bool: 

844 """bool: Device supports CIG with D3D12.""" 

845 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2Lx

846  

847 @property 

848 def mem_decompress_algorithm_mask(self) -> int: 

849 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum.""" 

850 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2~x

851  

852 @property 

853 def mem_decompress_maximum_length(self) -> int: 

854 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed.""" 

855 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2ay

856  

857 @property 

858 def vulkan_cig_supported(self) -> bool: 

859 """bool: Device supports CIG with Vulkan.""" 

860 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2ty

861  

862 @property 

863 def gpu_pci_device_id(self) -> int: 

864 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID. 

865  

866 Returns 0 if the driver does not support this query. 

867 """ 

868 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2Sx

869  

870 @property 

871 def gpu_pci_subsystem_id(self) -> int: 

872 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID. 

873  

874 Returns 0 if the driver does not support this query. 

875 """ 

876 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2Tx

877  

878 @property 

879 def host_numa_virtual_memory_management_supported(self) -> bool: 

880 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

881 return bool( 20w

882 self._get_cached_attribute( 20w

883 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 20w

884 ) 

885 ) 

886  

887 @property 

888 def host_numa_memory_pools_supported(self) -> bool: 

889 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

890 return bool( 2/w

891 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2/w

892 ) 

893  

894 # Start of CUDA 13 device attributes 

895  

896 @property 

897 def host_numa_multinode_ipc_supported(self) -> bool: 

898 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system.""" 

899 return bool( 2:w

900 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2:w

901 ) 

902  

903 @property 

904 def host_memory_pools_supported(self) -> bool: 

905 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

906 return bool( 2k XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l-w_k1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h6mTl4eUlHk7gVl_A|n`kIw

907 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2k XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l-w_k1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h6mTl4eUlHk7gVl_A|n`kIw

908 ) 

909  

910 @property 

911 def host_virtual_memory_management_supported(self) -> bool: 

912 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs.""" 

913 return bool( 21w

914 self._get_cached_attribute( 21w

915 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 21w

916 ) 

917 ) 

918  

919 @property 

920 def host_alloc_dma_buf_supported(self) -> bool: 

921 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism.""" 

922 return bool( 23y

923 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 23y

924 ) 

925  

926 @property 

927 def only_partial_host_native_atomic_supported(self) -> bool: 

928 """bool: Link between the device and the host supports only some native atomic operations.""" 

929 return bool( 22w

930 self._get_cached_attribute( 22w

931 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 22w

932 ) 

933 ) 

934  

935  

936class Device: 

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

938  

939 This is a singleton object that helps ensure interoperability 

940 across multiple libraries imported in the process to both see 

941 and use the same GPU device. 

942  

943 While acting as the entry point, many other CUDA resources can be 

944 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent 

945 resource created through this device, will continue to refer to 

946 this device's context. 

947  

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

949 for a specified device. 

950  

951 Note 

952 ---- 

953 Will not initialize the GPU. 

954  

955 Parameters 

956 ---------- 

957 device_id : int, optional 

958 Device ordinal to return a :obj:`~_device.Device` object for. 

959 Default value of `None` return the currently used device. 

960  

961 """ 

962 __slots__ = ( 

963 "_device_id", 

964 "_memory_resource", 

965 "_has_inited", 

966 "_properties", 

967 "_resources", 

968 "_uuid", 

969 "_context", 

970 "__weakref__", 

971 ) 

972  

973 def __new__(cls, device_id: Device | int | None = None): 

974 if isinstance(device_id, Device): 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)r:Dqz;Drz=Dsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSp2DZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs#E+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2Afw*DQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

975 return device_id 2FkGk:D;D=D7wXy8w9w!wYy|k#wPpQzQpRzRp*lSp2D|v}vTpUpVpWpXpYpZpt 0p1p2p3p4p5p6p7p8p~vwyxy9p!p#pxpyp8A9A!A#Anlzk#kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!h*hrl#Ewp^oJeKe}n2C(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A2A*D3A4Ap q

976  

977 Device_ensure_cuda_initialized() 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

978 device_id = Device_resolve_device_id(device_id) 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

979 devices = Device_ensure_tls_devices(cls) 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

980  

981 try: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

982 return devices[device_id] 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

983 except IndexError: 2UDVD

984 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2UDVD

985  

986 def _check_context_initialized(self): 

987 if not self._has_inited: 23C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpReSeTeUeVeWeXeYeZe0e1e2eLp8C9CZCspdBeBfBtpgBFkGk^kImJm!CKmLmMmNmOmPm:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC9kelQmflglhlilOz!k|D}D$E%E~D'E(E#C$CaEbE)E*E+E,E-EPzQe,z4D5D6D7D8D9D!D#D{D.E/EklYD[rJCwyxyZy3Dxpyp8A9A!A#A%C'C(C)C*C+C'k(k0C,CSzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml1z2z3z4z5z6z7z8z9z!z#z$z%zTz-lal}k0y1y~k'z2yIk^v+j:E;EcE=EdE?E@EeEfE[E]E^EgE_EhEiEjEkElEmEnEoEpE`EqErEsEtE{EuEvE|E}E~EaFwEbFxEcFdFyEzEeFfFgFAEhFBECEDEEEFEGEHEIEJEiFKELEMENEjFOEPEkFlFmFnFQEoFREpFqFSETErFsFtFUEuFVEWEXEYEZE0E1E2E3EvF4E5E6E7EwF8E9ExFyFzkWl#k$k_kUzHkag+D,jvo%m'm(mxo-jyo.jzo)m*m+mAo7f8fR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X ,m-mbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJo5exktkukvkyk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlngg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSo_jTomnnnonUo/f:f2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 pnqnlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3o8jymBlClDlzm;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$or s ek%oTnUnVn'ofk(oWnXnYn)ogk*oZn0n1n+ohk,o2n3n4n-oik.o5n6n7n/ojk:o8n9n!n;okk=o#n$n%n(zlk?o'n(n)n@o{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlDmDYCnDoD

988 raise CUDAError( 

989 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?" 

990 ) 

991  

992  

993 @classmethod 

994 def get_all_devices(cls): 

995 """ 

996 Query the available device instances. 

997  

998 Returns 

999 ------- 

1000 tuple of Device 

1001 A tuple containing instances of available devices. 

1002 """ 

1003 from cuda.core import system 26w3exDyDzD+lZzBD$wCDDDEDFDGDHDIDJDKDLDMD(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A`A{A

1004 total = system.get_num_devices() 26w3exDyDzD+lZzBD$wCDDDEDFDGDHDIDJDKDLDMD(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A`A{A

1005 return tuple(cls(device_id) for device_id in range(total)) 26w3exDyDzD+lZzBD$wCDDDEDFDGDHDIDJDKDLDMD(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A`A{A

1006  

1007 def to_system_device(self) -> 'cuda.core.system.Device': 

1008 """ 

1009 Get the corresponding :class:`cuda.core.system.Device` (which is used 

1010 for NVIDIA Machine Library (NVML) access) for this 

1011 :class:`cuda.core.Device` (which is used for CUDA access). 

1012  

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

1014  

1015 Returns 

1016 ------- 

1017 cuda.core.system.Device 

1018 The corresponding system-level device instance used for NVML access. 

1019 """ 

1020 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2Vw

1021  

1022 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2Vw

1023 raise RuntimeError( 

1024 "cuda.core.system.Device requires cuda_bindings 13.1.2+ or 12.9.6+" 

1025 ) 

1026  

1027 from cuda.core.system import Device as SystemDevice 2Vw

1028 return SystemDevice(uuid=self.uuid) 2Vw

1029  

1030 @property 

1031 def device_id(self) -> int: 

1032 """Return device ordinal.""" 

1033 return self._device_id 2_v`v(e6e)e7e*e8e+e9e,e!e-e#eFkGk[o]o^k:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC|D}DqD0D]v-zAF$E%E~D'E(E1DaEbEboPp,DQzQpRz9mRp$D*lSp2DQe|vwk}vTpUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p!m5p%D'D6p(D#m7p)Dkl8pYD[r~vwyxy( Zy9pYz!p$m#pxpyp8A9A!A#AMp'k(kZz[y|r]yTz-lal^v+jjlnlzkADolKl#k$kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!h*hrl#Ewp{k^oJeKe}n2C7m8mNDODagjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A2A*D3A4A,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jdpepp q ekfkgkhkikjkkklk*zBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0g1g2g+z

1034  

1035 @property 

1036 def pci_bus_id(self) -> str: 

1037 """Return a PCI Bus Id string for this device.""" 

1038 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2+l|rVw

1039 return bus_id[:12].decode() 2+l|rVw

1040  

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

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

1043  

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

1045 device and the specified peer device. 

1046  

1047 Parameters 

1048 ---------- 

1049 peer : Device | int 

1050 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID. 

1051 """ 

1052 peer = Device(peer) 

1053 cdef int d1 = <int> self.device_id 

1054 cdef int d2 = <int> peer.device_id 

1055 if d1 == d2: 

1056 return True 

1057 cdef int value = 0 

1058 with nogil: 

1059 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2)) 

1060 return bool(value) 

1061  

1062 @property 

1063 def uuid(self) -> str: 

1064 """Return a UUID for the device. 

1065  

1066 Returns 16-octets identifying the device. If the device is in 

1067 MIG mode, returns its MIG UUID which uniquely identifies the 

1068 subscribed MIG compute instance. 

1069  

1070 Note 

1071 ---- 

1072 MIG UUID is only returned when device is in MIG mode and the 

1073 driver is older than CUDA 11.4. 

1074  

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

1076  

1077 """ 

1078 cdef cydriver.CUuuid uuid 

1079 cdef cydriver.CUdevice dev 

1080 cdef bytes uuid_b 

1081 cdef str uuid_hex 

1082  

1083 if self._uuid is None: 2]v-zPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew+l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhw*kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1084 dev = self._device_id 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1085 with nogil: 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1086 IF CUDA_CORE_BUILD_MAJOR == 12: 

1087 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev)) 

1088 ELSE: # 13.0+ 

1089 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1090 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1091 uuid_hex = uuid_b.hex() 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1092 # 8-4-4-4-12 

1093 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1094 return self._uuid 2]v-zPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew+l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhw*kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1095  

1096 @property 

1097 def name(self) -> str: 

1098 """Return the device name.""" 

1099 # Use 256 characters to be consistent with CUDA Runtime 

1100 cdef int LENGTH = 256 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1101 cdef bytes name = bytes(LENGTH) 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1102 cdef char* name_ptr = name 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1103 cdef cydriver.CUdevice this_dev = self._device_id 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1104 with nogil: 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1105 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1106 name = name.split(b"\0")[0] 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1107 return name.decode() 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k

1108  

1109 @property 

1110 def properties(self) -> DeviceProperties: 

1111 """Return a :obj:`~_device.DeviceProperties` class with information about the device.""" 

1112 if self._properties is None: 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipLCjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzJzKzLz9kelQmflglhlilOz!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v,z~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

1113 self._properties = DeviceProperties._init(self._device_id) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

1114  

1115 return self._properties 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipLCjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzJzKzLz9kelQmflglhlilOz!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v,z~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 '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=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f

1116  

1117 @property 

1118 def resources(self) -> DeviceResources: 

1119 """Return the hardware resource query namespace for this device.""" 

1120 if self._resources is None: 2coAgBgb GdHdCgDgEgFgGgHgdoeofogohoiojokolomonooopoqorosotouo

1121 self._resources = DeviceResources._init(self._device_id) 2coAgBgb GdHdCgDgEgFgGgHgdoeofogohoiojokolomonooopoqorosotouo

1122 return self._resources 2coAgBgb GdHdCgDgEgFgGgHgdoeofogohoiojokolomonooopoqorosotouo

1123  

1124 @property 

1125 def compute_capability(self) -> ComputeCapability: 

1126 """Return a named tuple with 2 fields: major and minor.""" 

1127 cdef DeviceProperties prop = self.properties 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipLCjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!kQe,zvpMpG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_bTC`bUC{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{vFeGeHeIe

1128 if "compute_capability" in prop._cache: 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipLCjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!kQe,zvpMpG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_bTC`bUC{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{vFeGeHeIe

1129 return prop._cache["compute_capability"] 2a KCLC7wXy8w9w!wYy|k#wlxmxnxOzQe,zvpmlb GdHd~kQCRC'zyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_bTC`bUC{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcc d H I l m u v + OcPc, w x - QcRcScTcUc. / VcWcXcNdYcZc: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cJ K Td#cUd$ce f L M 9 ! A B ` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d=c?cab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadN O bdcdddedfdgdhdidjd6dkd7dldmdndodpdqdrdsdtdudvdwdxdydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v

1130 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe

1131 prop._cache["compute_capability"] = cc 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe

1132 return cc 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe

1133  

1134 @property 

1135 def arch(self) -> str: 

1136 """Return compute capability as a string (e.g., '75' for CC 7.5).""" 

1137 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a 7wXy8w9w!wYy|k#wlxmxnxvpmlb GdHd'zFBmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcc d H I l m u v + OcPc, w x - QcRcScTcUc. / VcWcXcYcZc: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cJ K #c$ce f L M 9 ! A B ` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c=c?cab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadN O bdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v

1138  

1139 @property 

1140 def context(self) -> Context: 

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

1142  

1143 Note 

1144 ---- 

1145 Device must be initialized. 

1146  

1147 """ 

1148 self._check_context_initialized() 2vozobg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoxkvlxmTolg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3oymElAm%o(o*o,o.o:o=o?o

1149 return self._context 2vozobg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoxkvlxmTolg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3oymElAm%o(o*o,o.o:o=o?o

1150  

1151 @property 

1152 def memory_resource(self) -> MemoryResource: 

1153 """Return :obj:`~_memory.MemoryResource` associated with this device.""" 

1154 cdef int attr, device_id 

1155 if self._memory_resource is None: 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g+z

1156 # If the device is in TCC mode, or does not support memory pools for some other reason, 

1157 # use the SynchronousMemoryResource which does not use memory pools. 

1158 device_id = self._device_id 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z

1159 with nogil: 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z

1160 HANDLE_RETURN( 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z

1161 cydriver.cuDeviceGetAttribute( 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z

1162 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1163 ) 

1164 ) 

1165 if attr == 1: 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z

1166 from cuda.core._memory import DeviceMemoryResource 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z

1167 self._memory_resource = DeviceMemoryResource(self._device_id) 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z

1168 else: 

1169 from cuda.core._memory._legacy import _SynchronousMemoryResource 

1170 self._memory_resource = _SynchronousMemoryResource(self._device_id) 

1171  

1172 return self._memory_resource 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g+z

1173  

1174 @memory_resource.setter 

1175 def memory_resource(self, mr): 

1176 from cuda.core._memory import MemoryResource 

1177 assert_type(mr, MemoryResource) 

1178 self._memory_resource = mr 

1179  

1180 @property 

1181 def default_stream(self) -> Stream: 

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

1183  

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

1185 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1186  

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

1188 the legacy stream. 

1189  

1190 """ 

1191 return default_stream() 2FkGk|D}DZF$e~D%e'eaEbE)E*E+E,E-EQzRz9m$D*l2DwkpD0FrD1FsD2FtD3FuD4FvD5FwD6F7F8F9F!F#F$F%F'F(F)F*F!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dxpyp8A9A!A#A'k(kyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWy^v+jjlnlzkolJlWl#k$k_kpl3gql4gkxPlQl5gRl6grlSlTl#Ewp4eUlHk7gVlag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jp q ekfkgkhkikjkkklkPDIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g+z

1192  

1193 def __int__(self): 

1194 """Return device_id.""" 

1195 return self._device_id 2?D@D[D'k(k

1196  

1197 def __repr__(self): 

1198 return f"<Device {self._device_id} ({self.name})>" 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox@k

1199  

1200 def __hash__(self) -> int: 

1201 return hash(self.uuid) 2]v-zPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew$A0z%A'A5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhw*kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk

1202  

1203 def __eq__(self, other) -> bool: 

1204 if not isinstance(other, Device): 2]vPpk QpXlRpYlSpZlTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk9p8g!p(l#p)lawbwcwP dwewSD0zTDWD5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhwwovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcpp q r s DkEkYC

1205 return NotImplemented 2]vWDwovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcpYC

1206 return self._device_id == other._device_id 2]vPpk QpXlRpYlSpZlTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk9p8g!p(l#p)lawbwcwP dwewSD0zTD5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhwwop q r s DkEk

1207  

1208 def __reduce__(self): 

1209 return Device, (self.device_id,) 2bo,DQzRz9m$D*l2DQewkrDsDtDuDvDwD!m%D'D(D#m)DklYD[rwyxyZyYz$mxpyp8A9A!A#Adpep

1210  

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

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

1213  

1214 Initializes CUDA and sets the calling thread to a valid CUDA 

1215 context. By default the primary context is used, but optional `ctx` 

1216 parameter can be used to explicitly supply a :obj:`~_context.Context` object. 

1217  

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

1219  

1220 Parameters 

1221 ---------- 

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

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

1224  

1225 Returns 

1226 ------- 

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

1228 Popped context. 

1229  

1230 Examples 

1231 -------- 

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

1233 calling this method, e.g. 

1234  

1235 >>> from cuda.core import Device 

1236 >>> dev0 = Device(0) 

1237 >>> dev0.set_current() 

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

1239  

1240 """ 

1241 cdef ContextHandle h_context 

1242 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1243 cdef Context prev_owned = None 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdQDCgDgEglsFgRDGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1244  

1245 if ctx is not None: 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdQDCgDgEglsFgRDGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1246 # TODO: revisit once Context is cythonized 

1247 assert_type(ctx, Context) 2QDRD

1248 if ctx._device_id != self._device_id: 2QDRD

1249 raise RuntimeError( 

1250 "the provided context was created on the device with" 

1251 f" id={ctx._device_id}, which is different from the target id={self._device_id}" 

1252 ) 

1253 if self._has_inited and self._context is not None: 2QDRD

1254 prev_owned = self._context 2QDRD

1255 # prev_ctx is the previous context 

1256 curr_ctx = as_cu(ctx._h_context) 2QDRD

1257 prev_ctx = NULL 2QDRD

1258 with nogil: 2QDRD

1259 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2QDRD

1260 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2QDRD

1261 self._has_inited = True 2QDRD

1262 self._context = ctx # Store owning context reference 2QDRD

1263 if prev_ctx != NULL: 2QDRD

1264 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2QDRD

1265 return prev_owned 2QDRD

1266 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id) 

1267 else: 

1268 # use primary ctx 

1269 h_context = get_primary_context(self._device_id) 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1270 if h_context.get() == NULL: 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1271 raise ValueError("Cannot set NULL context as current") 

1272 with nogil: 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1273 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1274 self._has_inited = True 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1275 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1276  

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

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

1279  

1280 Note 

1281 ---- 

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

1283  

1284 Parameters 

1285 ---------- 

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

1287 Customizable dataclass for context creation options. 

1288  

1289 Returns 

1290 ------- 

1291 :obj:`~_context.Context` 

1292 Newly created context object. 

1293  

1294 """ 

1295 cdef int i 

1296 cdef object resources 

1297 cdef object res 

1298 cdef SMResource sm_res 

1299 cdef WorkqueueResource wq_res 

1300 cdef GreenCtxHandle h_green 

1301  

1302 if options is None: 2ZDAgBgb -lalCgDgEgFgGgHg-D!E

1303 raise ValueError( 2!E

1304 "options with device resources must be provided to create a green context" 

1305 ) 

1306  

1307 options = check_or_create_options(ContextOptions, options, "Context options") 2ZDAgBgb -lalCgDgEgFgGgHg-D!E

1308 if options.resources is None: 2ZDAgBgb -lalCgDgEgFgGgHg-D!E

1309 raise ValueError( 2!E

1310 "ContextOptions.resources must be provided to create a green context" 

1311 ) 

1312  

1313 resources = tuple(options.resources) 2ZDAgBgb -lalCgDgEgFgGgHg-D

1314 if len(resources) == 0: 2ZDAgBgb -lalCgDgEgFgGgHg-D

1315 raise ValueError("ContextOptions.resources must not be empty") 

1316  

1317 cdef vector[cydriver.CUdevResource] c_resources 

1318 c_resources.resize(len(resources)) 2ZDAgBgb -lalCgDgEgFgGgHg-D

1319  

1320 for i, res in enumerate(resources): 2ZDAgBgb -lalCgDgEgFgGgHg-D

1321 if isinstance(res, SMResource): 2ZDAgBgb -lalCgDgEgFgGgHg-D

1322 sm_res = <SMResource>res 2ZDAgBgb -lalCgDgEgFgGgHg-D

1323 if not sm_res._is_usable: 2ZDAgBgb -lalCgDgEgFgGgHg-D

1324 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2-D

1325 c_resources[i] = sm_res._resource 2ZDAgBgb -lalCgDgEgFgGgHg

1326 elif isinstance(res, WorkqueueResource): 2al

1327 wq_res = <WorkqueueResource>res 2al

1328 c_resources[i] = wq_res._wq_config_resource 2al

1329 else: 

1330 raise TypeError(f"Unsupported context resource type: {type(res)}") 

1331  

1332 h_green = create_green_ctx_handle( 2ZDAgBgb -lalCgDgEgFgGgHg

1333 c_resources.data(), 

1334 <unsigned int>(c_resources.size()), 

1335 <cydriver.CUdevice>(self._device_id), 2ZDAgBgb -lalCgDgEgFgGgHg

1336 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM), 

1337 ) 

1338 if h_green.get() == NULL: 2ZDAgBgb -lalCgDgEgFgGgHg

1339 HANDLE_RETURN(get_last_error()) 

1340 raise RuntimeError("Failed to create CUDA green context") 

1341  

1342 return Context._from_green_ctx(Context, h_green, self._device_id) 2ZDAgBgb -lalCgDgEgFgGgHg

1343  

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

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

1346  

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

1348  

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

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

1351  

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

1353 such that the lifetime is managed. 

1354  

1355 Note 

1356 ---- 

1357 Device must be initialized. 

1358  

1359 Parameters 

1360 ---------- 

1361 obj : :obj:`~_stream.IsStreamType`, optional 

1362 Any object supporting the ``__cuda_stream__`` protocol. 

1363 options : :obj:`~_stream.StreamOptions`, optional 

1364 Customizable dataclass for stream creation options. 

1365  

1366 Returns 

1367 ------- 

1368 :obj:`~_stream.Stream` 

1369 Newly created stream object. 

1370  

1371 """ 

1372 self._check_context_initialized() 23C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpLp8C9CeBfBFkGk^kImJm!CKmLmMmNmOmPm:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC9kelQmflglhlilOz!k|D}D$E%E~D'E(E#C$CaEbE)E*E+E,E-EPzQe,z4D5D6D7D8D9D!D#D{D.E/EklYD[rJCwyxyZy3Dxpyp8A9A!A#A%C'C(C)C*C+C,CSzG Ck-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml1z2z3z4z5z6z7z8z9z!z#z$z%z}k0y1y~k'z2yIk:E;EcE=EdE?E@EeEfE[E]E^EgE_EhEiEjEkElEmEnEoEpE`EqErEsEtE{EuEvE|E}E~EaFwEbFxEcFdFyEzEeFfFgFAEhFBECEDEEEFEGEHEIEJEiFKELEMENEjFOEPEkFlFmFnFQEoFREpFqFSETErFsFtFUEuFVEWEXEYEZE0E1E2E3EvF4E5E6E7EwF8E9ExFyFzkWlUzHkag+DxoyoAoykgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSoUozmqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$or s 'o)o+o-o/o;o(z@o{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlDmDYCnDoD

1373 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 23C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpLp8C9CeBfBFkGk^kImJm!CKmLmMmNmOmPm:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC9kelQmflglhlilOz!k|D}D$E%E~D'E(E#C$CaEbE)E*E+E,E-EPzQe,z4D5D6D7D8D9D!D#D{D.E/EklYD[rJCwyxyZy3Dxpyp8A9A!A#A%C'C(C)C*C+C,CSzG Ck-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml1z2z3z4z5z6z7z8z9z!z#z$z%z}k0y1y~k'z2yIk:E;EcE=EdE?E@EeEfE[E]E^EgE_EhEiEjEkElEmEnEoEpE`EqErEsEtE{EuEvE|E}E~EaFwEbFxEcFdFyEzEeFfFgFAEhFBECEDEEEFEGEHEIEJEiFKELEMENEjFOEPEkFlFmFnFQEoFREpFqFSETErFsFtFUEuFVEWEXEYEZE0E1E2E3EvF4E5E6E7EwF8E9ExFyFzkWlUzHkag+DxoyoAoykgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSoUozmqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$or s 'o)o+o-o/o;o(z@o{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlDmDYCnDoD

1374  

1375 def create_event(self, options: EventOptions | None = None) -> Event: 

1376 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`. 

1377  

1378 Note 

1379 ---- 

1380 Device must be initialized. 

1381  

1382 Parameters 

1383 ---------- 

1384 options : :obj:`EventOptions`, optional 

1385 Customizable dataclass for event creation options. 

1386  

1387 Returns 

1388 ------- 

1389 :obj:`~_event.Event` 

1390 Newly created event object. 

1391  

1392 """ 

1393 self._check_context_initialized() 2bBReSeTeUeVeWeXeYeZe0e1e2eZCspdBeBfBtpgB^k{D0CCk1C)kwB%m'm(m)m*m+m7f8f9g!gW X ,m-mtlultkukvk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlnwlxlylmnnnon/f:f$g%g7 8 pnqnzlAlBlClDl;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnFlGlHlTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n

1394 cdef Context ctx = self._context 2bBReSeTeUeVeWeXeYeZe0e1e2eZCspdBeBfBtpgB^k{D0CCk1C)kwB%m'm(m)m*m+m7f8f9g!gW X ,m-mtlultkukvk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlnwlxlylmnnnon/f:f$g%g7 8 pnqnzlAlBlClDl;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnFlGlHlTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n

1395 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2bBReSeTeUeVeWeXeYeZe0e1e2eZCspdBeBfBtpgB^k{D0CCk1C)kwB%m'm(m)m*m+m7f8f9g!gW X ,m-mtlultkukvk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlnwlxlylmnnnon/f:f$g%g7 8 pnqnzlAlBlClDl;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnFlGlHlTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n

1396  

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

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

1399  

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

1401 using the memory resource currently associated with this Device. 

1402  

1403 Note 

1404 ---- 

1405 Device must be initialized. 

1406  

1407 Parameters 

1408 ---------- 

1409 size : int 

1410 Number of bytes to allocate. 

1411 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

1412 Keyword-only. The stream establishing the stream ordering semantic. 

1413 Must be passed explicitly; pass ``self.default_stream`` to use 

1414 the default stream. 

1415  

1416 Returns 

1417 ------- 

1418 :obj:`~_memory.Buffer` 

1419 Newly created buffer object. 

1420  

1421 """ 

1422 self._check_context_initialized() 2'k(kTz-lal^v+j,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklk

1423 return self.memory_resource.allocate(size, stream=stream) 2'k(kTz-lal^v+j,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklk

1424  

1425 def sync(self): 

1426 """Synchronize the device. 

1427  

1428 Note 

1429 ---- 

1430 Device must be initialized. 

1431  

1432 """ 

1433 self._check_context_initialized() 2xpyp8A9A!A#A'k(k0y1y2yIkcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9EzkWl#k$k_kHk

1434 handle_return(runtime.cudaDeviceSynchronize()) 2xpyp8A9A!A#A'k(k0y1y2yIkcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9EzkWl#k$k_kHk

1435  

1436 def create_graph_builder(self) -> "GraphBuilder": 

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

1438  

1439 Returns 

1440 ------- 

1441 :obj:`~graph.GraphBuilder` 

1442 Newly created graph builder object. 

1443  

1444 """ 

1445 from cuda.core.graph._graph_builder import GraphBuilder 2|AblJk}AKkcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k:D;D=D^D_D`D7w8w9w!w|k#wlxmxnx?D@D[DMCNCOC9kelflglhlilOz!k

1446  

1447 self._check_context_initialized() 2|AblJk}AKkcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k:D;D=D^D_D`D7w8w9w!w|k#wlxmxnx?D@D[DMCNCOC9kelflglhlilOz!k

1448 return GraphBuilder._init(stream=self.create_stream(), is_stream_owner=True) 2|AblJk}AKkcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k:D;D=D^D_D`D7w8w9w!w|k#wlxmxnx?D@D[DMCNCOC9kelflglhlilOz!k

1449  

1450  

1451cdef inline int Device_ensure_cuda_initialized() except? -1: 

1452 """Initialize CUDA driver and check version compatibility (once per process).""" 

1453 global _is_cuInit 

1454 if _is_cuInit is False: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1455 with _lock, nogil: 

1456 HANDLE_RETURN(cydriver.cuInit(0)) 

1457 _is_cuInit = True 

1458 try: 

1459 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1460 except ImportError: 

1461 pass 

1462 else: 

1463 warn_if_cuda_major_version_mismatch() 

1464 return 0 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1465  

1466  

1467cdef inline int Device_resolve_device_id(device_id) except? -1: 

1468 """Resolve device_id, defaulting to current device or 0.""" 

1469 cdef cydriver.CUdevice dev 

1470 cdef cydriver.CUcontext ctx 

1471 cdef cydriver.CUresult err 

1472 if device_id is None: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1473 with nogil: 2a KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+CvpMp'k(k0C,CPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]ySzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AwmUzwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTb2CUb7mVb8mWbNDXbODYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g

1474 err = cydriver.cuCtxGetDevice(&dev) 2a KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+CvpMp'k(k0C,CPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]ySzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AwmUzwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTb2CUb7mVb8mWbNDXbODYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g

1475 if err == cydriver.CUresult.CUDA_SUCCESS: 2a KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+CvpMp'k(k0C,CPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]ySzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AwmUzwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTb2CUb7mVb8mWbNDXbODYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g

1476 return int(dev) 2KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+C0C,C3ykzmz4y5yozSz1CwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2y/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AUzwpUlHk7gVl_A|n`kIw{k^o}nsl+nTb2CUb7mVb8mWbNDXbODYbagZb,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 '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{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^n_n`ncCeC{nlC{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f^y_y`y{y|y}y~yazbzczdzezfzgzhzVzWzXz

1477 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1478 with nogil: 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g

1479 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g

1480 assert <void*>(ctx) == NULL 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g

1481 return 0 # cudart behavior 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g

1482 else: 

1483 HANDLE_RETURN(err) 

1484 elif device_id < 0: 2a $p%p'p(pJk)p*pKk~A+p,p-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquqaBvqwqzpxqApyqBpzqCpAqBqCqDqEq-vFq.vGqHqIqJqKqLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrtr;vurvrLpwr=vxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrspPrdBQrRrSrtpTrgBUrFkVrGkWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*r+r,r-r.r/r:riB!k;r.ell=r0D/e]v:e-z;e=e?e?r@e$e3e[e%e]e'e^e1D_e`e{e|e}e~eafbfcf@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l]r^r_rjB`r{rkB'k(klBmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBox'AuBWDvB}rwB~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms~kBBCBDBEBmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff^v+jnsGBHBospsIBjlJBKBLBMBqsrsNBssOBPBtsusQBvswsRBxsysSBTBUBVBWBzsAsXBYBZB0B1BBs2B3BCs4B5BDs6B7BEs8B9B!B#B$BFs%B'B(B)BGs*B+B,BHsIsJs-BKs.BLsMs/BNs:B;BOs+h=BPs?B@B[B]B{kBD$wCDDDEDFDGDHDIDJDKDLDMDQs]DTb2CUbRsVbSsWbXbYbagTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev`A{AfvgvhvWCivjvkvlvmvXCnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1485 raise ValueError(f"device_id must be >= 0, got {device_id}") 

1486 return device_id 2a $p%p'p(pJk)p*pKk~A+p,p-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquqaBvqwqzpxqApyqBpzqCpAqBqCqDqEq-vFq.vGqHqIqJqKqLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrtr;vurvrLpwr=vxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrspPrdBQrRrSrtpTrgBUrFkVrGkWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*r+r,r-r.r/r:riB!k;r.ell=r0D/e]v:e-z;e=e?e?r@e$e3e[e%e]e'e^e1D_e`e{e|e}e~eafbfcf@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l]r^r_rjB`r{rkB'k(klBmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBox'AuBWDvB}rwB~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms~kBBCBDBEBmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff^v+jnsGBHBospsIBjlJBKBLBMBqsrsNBssOBPBtsusQBvswsRBxsysSBTBUBVBWBzsAsXBYBZB0B1BBs2B3BCs4B5BDs6B7BEs8B9B!B#B$BFs%B'B(B)BGs*B+B,BHsIsJs-BKs.BLsMs/BNs:B;BOs+h=BPs?B@B[B]B{kBD$wCDDDEDFDGDHDIDJDKDLDMDQsTb2CUbRsVbSsWbXbYbagTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev`A{AfvgvhvWCivjvkvlvmvXCnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1487  

1488  

1489cdef inline list Device_ensure_tls_devices(cls): 

1490 """Ensure thread-local Device singletons exist, creating if needed.""" 

1491 cdef int total 

1492 try: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1493 return _tls.devices 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v

1494 except AttributeError: 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1495 with nogil: 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1496 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1497 devices = _tls.devices = [] 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1498 for dev_id in range(total): 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1499 device = super(Device, cls).__new__(cls) 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1500 device._device_id = dev_id 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1501 device._memory_resource = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1502 device._has_inited = False 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1503 device._properties = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1504 device._resources = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1505 device._uuid = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1506 device._context = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1507 devices.append(device) 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v

1508 return devices 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!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~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v