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

419 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-04-29 01:27 +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 HANDLE_RETURN 

11  

12import threading 

13  

14from cuda.core._context cimport Context 

15from cuda.core._context import ContextOptions 

16from cuda.core._event cimport Event as cyEvent 

17from cuda.core._event import Event, EventOptions 

18from cuda.core._memory._buffer cimport Buffer, MemoryResource 

19from cuda.core._resource_handles cimport ( 

20 ContextHandle, 

21 create_context_handle_ref, 

22 get_primary_context, 

23 as_cu, 

24) 

25  

26from cuda.core._stream import IsStreamT, Stream, StreamOptions 

27from cuda.core._utils.clear_error_support import assert_type 

28from cuda.core._utils.cuda_utils import ( 

29 ComputeCapability, 

30 CUDAError, 

31 driver, 

32 handle_return, 

33 runtime, 

34) 

35from cuda.core._stream cimport default_stream 

36  

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

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

39_tls = threading.local() 

40_lock = threading.Lock() 

41cdef bint _is_cuInit = False 

42  

43  

44cdef class DeviceProperties: 

45 """ 

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

47  

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

49 """ 

50 cdef: 

51 int _handle 

52 dict _cache 

53  

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

55 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2|D

56  

57 @classmethod 

58 def _init(cls, handle): 

59 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

60 self._handle = handle 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

61 self._cache = {} 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

62 return self 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

63  

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

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

66 cdef int val 

67 cdef cydriver.CUresult err 

68 with nogil: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

69 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

70 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

71 return <int>default 

72 HANDLE_RETURN(err) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

73 return val 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

74  

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

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

77 if attr not in self._cache: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAyByCyDyEyFy3kGyHyIyJyKyLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPosj3w4w5w|v'v}v6w[y7w~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

78 self._cache[attr] = self._get_attribute(attr, default) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq 9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}v6w7w~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

79 return self._cache[attr] 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAyByCyDyEyFy3kGyHyIyJyKyLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPosj3w4w5w|v'v}v6w[y7w~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

80  

81 @property 

82 def max_threads_per_block(self) -> int: 

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

84 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2tjBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjyky

85  

86 @property 

87 def max_block_dim_x(self) -> int: 

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

89 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2]w

90  

91 @property 

92 def max_block_dim_y(self) -> int: 

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

94 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2^w

95  

96 @property 

97 def max_block_dim_z(self) -> int: 

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

99 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2_w

100  

101 @property 

102 def max_grid_dim_x(self) -> int: 

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

104 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2{wIk

105  

106 @property 

107 def max_grid_dim_y(self) -> int: 

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

109 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2|w

110  

111 @property 

112 def max_grid_dim_z(self) -> int: 

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

114 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2}w

115  

116 @property 

117 def max_shared_memory_per_block(self) -> int: 

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

119 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2cxBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjyky

120  

121 @property 

122 def total_constant_memory(self) -> int: 

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

124 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2Qx

125  

126 @property 

127 def warp_size(self) -> int: 

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

129 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2Tx

130  

131 @property 

132 def max_pitch(self) -> int: 

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

134 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2ax

135  

136 @property 

137 def maximum_texture1d_width(self) -> int: 

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

139 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2nx

140  

141 @property 

142 def maximum_texture1d_linear_width(self) -> int: 

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

144 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2vj

145  

146 @property 

147 def maximum_texture1d_mipmapped_width(self) -> int: 

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

149 return self._get_cached_attribute( 2qw

150 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2qw

151 ) 

152  

153 @property 

154 def maximum_texture2d_width(self) -> int: 

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

156 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2vx

157  

158 @property 

159 def maximum_texture2d_height(self) -> int: 

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

161 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2qx

162  

163 @property 

164 def maximum_texture2d_linear_width(self) -> int: 

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

166 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2ux

167  

168 @property 

169 def maximum_texture2d_linear_height(self) -> int: 

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

171 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2sx

172  

173 @property 

174 def maximum_texture2d_linear_pitch(self) -> int: 

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

176 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2tx

177  

178 @property 

179 def maximum_texture2d_mipmapped_width(self) -> int: 

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

181 return self._get_cached_attribute( 2tw

182 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2tw

183 ) 

184  

185 @property 

186 def maximum_texture2d_mipmapped_height(self) -> int: 

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

188 return self._get_cached_attribute( 2jj

189 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2jj

190 ) 

191  

192 @property 

193 def maximum_texture3d_width(self) -> int: 

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

195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2yx

196  

197 @property 

198 def maximum_texture3d_height(self) -> int: 

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

200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2xx

201  

202 @property 

203 def maximum_texture3d_depth(self) -> int: 

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

205 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2wx

206  

207 @property 

208 def maximum_texture3d_width_alternate(self) -> int: 

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

210 return self._get_cached_attribute( 2ww

211 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2ww

212 ) 

213  

214 @property 

215 def maximum_texture3d_height_alternate(self) -> int: 

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

217 return self._get_cached_attribute( 2vw

218 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2vw

219 ) 

220  

221 @property 

222 def maximum_texture3d_depth_alternate(self) -> int: 

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

224 return self._get_cached_attribute( 2uw

225 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2uw

226 ) 

227  

228 @property 

229 def maximum_texturecubemap_width(self) -> int: 

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

231 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2zx

232  

233 @property 

234 def maximum_texture1d_layered_width(self) -> int: 

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

236 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2mx

237  

238 @property 

239 def maximum_texture1d_layered_layers(self) -> int: 

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

241 return self._get_cached_attribute( 2pw

242 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2pw

243 ) 

244  

245 @property 

246 def maximum_texture2d_layered_width(self) -> int: 

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

248 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2rx

249  

250 @property 

251 def maximum_texture2d_layered_height(self) -> int: 

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

253 return self._get_cached_attribute( 2rw

254 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2rw

255 ) 

256  

257 @property 

258 def maximum_texture2d_layered_layers(self) -> int: 

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

260 return self._get_cached_attribute( 2sw

261 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2sw

262 ) 

263  

264 @property 

265 def maximum_texturecubemap_layered_width(self) -> int: 

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

267 return self._get_cached_attribute( 2xw

268 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2xw

269 ) 

270  

271 @property 

272 def maximum_texturecubemap_layered_layers(self) -> int: 

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

274 return self._get_cached_attribute( 2kj

275 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2kj

276 ) 

277  

278 @property 

279 def maximum_surface1d_width(self) -> int: 

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

281 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2ex

282  

283 @property 

284 def maximum_surface2d_width(self) -> int: 

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

286 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2hx

287  

288 @property 

289 def maximum_surface2d_height(self) -> int: 

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

291 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2fx

292  

293 @property 

294 def maximum_surface3d_width(self) -> int: 

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

296 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2kx

297  

298 @property 

299 def maximum_surface3d_height(self) -> int: 

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

301 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2jx

302  

303 @property 

304 def maximum_surface3d_depth(self) -> int: 

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

306 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2ix

307  

308 @property 

309 def maximum_surface1d_layered_width(self) -> int: 

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

311 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2dx

312  

313 @property 

314 def maximum_surface1d_layered_layers(self) -> int: 

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

316 return self._get_cached_attribute( 2kw

317 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2kw

318 ) 

319  

320 @property 

321 def maximum_surface2d_layered_width(self) -> int: 

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

323 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2gx

324  

325 @property 

326 def maximum_surface2d_layered_height(self) -> int: 

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

328 return self._get_cached_attribute( 2lw

329 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2lw

330 ) 

331  

332 @property 

333 def maximum_surface2d_layered_layers(self) -> int: 

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

335 return self._get_cached_attribute( 2mw

336 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2mw

337 ) 

338  

339 @property 

340 def maximum_surfacecubemap_width(self) -> int: 

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

342 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2lx

343  

344 @property 

345 def maximum_surfacecubemap_layered_width(self) -> int: 

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

347 return self._get_cached_attribute( 2ow

348 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2ow

349 ) 

350  

351 @property 

352 def maximum_surfacecubemap_layered_layers(self) -> int: 

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

354 return self._get_cached_attribute( 2nw

355 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2nw

356 ) 

357  

358 @property 

359 def max_registers_per_block(self) -> int: 

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

361 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2bx

362  

363 @property 

364 def clock_rate(self) -> int: 

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

366 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2De@ypyJ 2kBj

367  

368 @property 

369 def texture_alignment(self) -> int: 

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

371 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2Ox

372  

373 @property 

374 def texture_pitch_alignment(self) -> int: 

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

376 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2Px

377  

378 @property 

379 def gpu_overlap(self) -> bool: 

380 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use instead async_engine_count.""" 

381 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2+w

382  

383 @property 

384 def multiprocessor_count(self) -> int: 

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

386 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2GxIk

387  

388 @property 

389 def kernel_exec_timeout(self) -> bool: 

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

391 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2qy

392  

393 @property 

394 def integrated(self) -> bool: 

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

396 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2:w

397  

398 @property 

399 def can_map_host_memory(self) -> bool: 

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

401 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 24w

402  

403 @property 

404 def compute_mode(self) -> int: 

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

406 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2ik

407  

408 @property 

409 def concurrent_kernels(self) -> bool: 

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

411 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 28w

412  

413 @property 

414 def ecc_enabled(self) -> bool: 

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

416 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2%w

417  

418 @property 

419 def pci_bus_id(self) -> int: 

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

421 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2Jx

422  

423 @property 

424 def pci_device_id(self) -> int: 

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

426 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2Kx

427  

428 @property 

429 def pci_domain_id(self) -> int: 

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

431 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2Lx

432  

433 @property 

434 def tcc_driver(self) -> bool: 

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

436 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2Nx

437  

438 @property 

439 def memory_clock_rate(self) -> int: 

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

441 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2ry

442  

443 @property 

444 def global_memory_bus_width(self) -> int: 

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

446 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2(w

447  

448 @property 

449 def l2_cache_size(self) -> int: 

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

451 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2=w

452  

453 @property 

454 def max_threads_per_multiprocessor(self) -> int: 

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

456 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2ujBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv

457  

458 @property 

459 def unified_addressing(self) -> bool: 

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

461 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a Aj

462  

463 @property 

464 def compute_capability_major(self) -> int: 

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

466 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPo[yJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe

467  

468 @property 

469 def compute_capability_minor(self) -> int: 

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

471 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPo7wJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe

472  

473 @property 

474 def global_l1_cache_supported(self) -> bool: 

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

476 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2'w

477  

478 @property 

479 def local_l1_cache_supported(self) -> bool: 

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

481 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2?w

482  

483 @property 

484 def max_shared_memory_per_multiprocessor(self) -> int: 

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

486 return self._get_cached_attribute( 2jwBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv

487 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2jwBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv

488 ) 

489  

490 @property 

491 def max_registers_per_multiprocessor(self) -> int: 

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

493 return self._get_cached_attribute( 2hwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv

494 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2hwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv

495 ) 

496  

497 @property 

498 def managed_memory(self) -> bool: 

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

500 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2@w

501  

502 @property 

503 def multi_gpu_board(self) -> bool: 

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

505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2yj

506  

507 @property 

508 def multi_gpu_board_group_id(self) -> int: 

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

510 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2Ex

511  

512 @property 

513 def host_native_atomic_supported(self) -> bool: 

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

515 return bool( 2ew

516 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2ew

517 ) 

518  

519 @property 

520 def single_to_double_precision_perf_ratio(self) -> int: 

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

522 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2sy

523  

524 @property 

525 def pageable_memory_access(self) -> bool: 

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

527 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2Ix

528  

529 @property 

530 def concurrent_managed_access(self) -> bool: 

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

532 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2XeYeZe0e1e2e9w-e.eQoIl.kVxJlKl/k:kLlMlpkFkNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9v0l1l

533  

534 @property 

535 def compute_preemption_supported(self) -> bool: 

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

537 return bool( 2~v

538 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2~v

539 ) 

540  

541 @property 

542 def can_use_host_pointer_for_registered_mem(self) -> bool: 

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

544 return bool( 2'v

545 self._get_cached_attribute( 2'v

546 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2'v

547 ) 

548 ) 

549  

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

551  

552 @property 

553 def cooperative_launch(self) -> bool: 

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

555 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2!wIk

556  

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

558  

559 @property 

560 def max_shared_memory_per_block_optin(self) -> int: 

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

562 return self._get_cached_attribute( 2iw

563 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2iw

564 ) 

565  

566 @property 

567 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

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

569 return bool( 2:v

570 self._get_cached_attribute( 2:v

571 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2:v

572 ) 

573 ) 

574  

575 @property 

576 def direct_managed_mem_access_from_host(self) -> bool: 

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

578 return bool( 2)v

579 self._get_cached_attribute( 2)v

580 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2)v

581 ) 

582 ) 

583  

584 @property 

585 def virtual_memory_management_supported(self) -> bool: 

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

587 return bool( 2=vGk3n4nHkVe

588 self._get_cached_attribute( 2=vGk3n4nHkVe

589 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2=vGk3n4nHkVe

590 ) 

591 ) 

592  

593 @property 

594 def handle_type_posix_file_descriptor_supported(self) -> bool: 

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

596 return bool( 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv+vT XvYvZvH I o p

597 self._get_cached_attribute( 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv+vT XvYvZvH I o p

598 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv+vT XvYvZvH I o p

599 ) 

600 ) 

601  

602 @property 

603 def handle_type_win32_handle_supported(self) -> bool: 

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

605 return bool( 2ij

606 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2ij

607 ) 

608  

609 @property 

610 def handle_type_win32_kmt_handle_supported(self) -> bool: 

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

612 return bool( 2,v

613 self._get_cached_attribute( 2,v

614 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2,v

615 ) 

616 ) 

617  

618 @property 

619 def max_blocks_per_multiprocessor(self) -> int: 

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

621 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2`w

622  

623 @property 

624 def generic_compression_supported(self) -> bool: 

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

626 return bool( 2aw

627 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2aw

628 ) 

629  

630 @property 

631 def max_persisting_l2_cache_size(self) -> int: 

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

633 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2~w

634  

635 @property 

636 def max_access_policy_window_size(self) -> int: 

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

638 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2[w

639  

640 @property 

641 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

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

643 return bool( 2*v

644 self._get_cached_attribute( 2*v

645 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2*v

646 ) 

647 ) 

648  

649 @property 

650 def reserved_shared_memory_per_block(self) -> int: 

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

652 return self._get_cached_attribute( 2zw

653 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2zw

654 ) 

655  

656 @property 

657 def sparse_cuda_array_supported(self) -> bool: 

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

659 return bool( 2lj

660 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2lj

661 ) 

662  

663 @property 

664 def read_only_host_register_supported(self) -> bool: 

665 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTERGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not.""" 

666 return bool( 2yw

667 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2yw

668 ) 

669  

670 @property 

671 def memory_pools_supported(self) -> bool: 

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

673 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFoGoHoIoJoKoLoMoNoVwWwXwYwZw0w'eXeFgJeKeGgwdHgIgJgKgLg(eYeMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe5gNeOe6gyd7g8g9g!g#g*e0e$gPeQe%gzd'g(g)g*g+g+e1e,gReSe-gAd.g/g:g;g=g,e2e?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh1w2wOoYnZnvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRy7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvCx-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9v(j0l`k1loh{k|kT XvYvSyZvphqhrhshthuhvhwhxhyhCdxfyfzhAhBhChDdDhEhFhGh8 9 ! # $ HhIhJhKhLh1f2f3f4f5fEeFeGeHeIeMhEdzfAfNhOhPhQhFdRhShThUhBfCfDfEfFfGdGfHfVhWhXhYhZh0h1h2h3h4h5h6h( ) * + , IdJdKd7h8h9h!h#hLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- . / : ; :h;h=h?h@h6f7f8f9f!f[h]h^h_h`hPdMfNf{h|h}h~hQdaibicidi@ [ ] ^ _ Tyeifigihi#f$f%f'f(f.f/f:f;f=fiiRdOfPfjikilimiSdnioipiqiQfRfSfTfUfTdVfWfrisitiuiviwixiyiziAiBiCi| } ~ abbbVdWdXdDiEiFiGiHiYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicbdbebfbgbTiUiViWiXi)f*f+f,f-fH I o p YiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iaj

674  

675 @property 

676 def gpu_direct_rdma_supported(self) -> bool: 

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

678 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2)wHkVe

679  

680 @property 

681 def gpu_direct_rdma_flush_writes_options(self) -> int: 

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

683 return self._get_cached_attribute( 2hj

684 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2hj

685 ) 

686  

687 @property 

688 def gpu_direct_rdma_writes_ordering(self) -> int: 

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

690 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2*w

691  

692 @property 

693 def mempool_supported_handle_types(self) -> int: 

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

695 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2Dx

696  

697 @property 

698 def deferred_mapping_cuda_array_supported(self) -> bool: 

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

700 return bool( 2(v

701 self._get_cached_attribute( 2(v

702 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2(v

703 ) 

704 ) 

705  

706 @property 

707 def numa_config(self) -> int: 

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

709 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2Hx

710  

711 @property 

712 def numa_id(self) -> int: 

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

714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2zj

715  

716 @property 

717 def multicast_supported(self) -> bool: 

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

719 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2Fx

720  

721 @property 

722 def surface_alignment(self) -> int: 

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

724 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2Mx

725  

726 @property 

727 def async_engine_count(self) -> int: 

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

729 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2sj

730  

731 @property 

732 def can_tex2d_gather(self) -> bool: 

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

734 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 25w

735  

736 @property 

737 def maximum_texture2d_gather_width(self) -> int: 

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

739 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2px

740  

741 @property 

742 def maximum_texture2d_gather_height(self) -> int: 

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

744 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2ox

745  

746 @property 

747 def stream_priorities_supported(self) -> bool: 

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

749 return bool( 2Aw

750 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2Aw

751 ) 

752  

753 @property 

754 def can_flush_remote_writes(self) -> bool: 

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

756 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 23w

757  

758 @property 

759 def host_register_supported(self) -> bool: 

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

761 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2/w

762  

763 @property 

764 def timeline_semaphore_interop_supported(self) -> bool: 

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

766 return bool( 2;v

767 self._get_cached_attribute( 2;v

768 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2;v

769 ) 

770 ) 

771  

772 @property 

773 def cluster_launch(self) -> bool: 

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

775 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 26w

776  

777 @property 

778 def can_use_64_bit_stream_mem_ops(self) -> bool: 

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

780 return bool( 2|v

781 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2|v

782 ) 

783  

784 @property 

785 def can_use_stream_wait_value_nor(self) -> bool: 

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

787 return bool( 2}v

788 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2}v

789 ) 

790  

791 @property 

792 def dma_buf_supported(self) -> bool: 

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

794 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2$w

795  

796 # Start of CUDA 12 device attributes 

797  

798 @property 

799 def ipc_event_supported(self) -> bool: 

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

801 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2;w

802  

803 @property 

804 def mem_sync_domain_count(self) -> int: 

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

806 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2Bx

807  

808 @property 

809 def tensor_map_access_supported(self) -> bool: 

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

811 return bool( 2mj/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvf

812 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2mj/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvf

813 ) 

814  

815 @property 

816 def handle_type_fabric_supported(self) -> bool: 

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

818 return bool( 2bw

819 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2bw

820 ) 

821  

822 @property 

823 def unified_function_pointers(self) -> bool: 

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

825 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2Rx

826  

827 @property 

828 def mps_enabled(self) -> bool: 

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

830 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2xj

831  

832 @property 

833 def host_numa_id(self) -> int: 

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

835 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2alblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm.w:k|f}f|o~f'jagbgcgl rksk

836  

837 @property 

838 def d3d12_cig_supported(self) -> bool: 

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

840 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2#w

841  

842 @property 

843 def mem_decompress_algorithm_mask(self) -> int: 

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

845 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2wj

846  

847 @property 

848 def mem_decompress_maximum_length(self) -> int: 

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

850 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2Ax

851  

852 @property 

853 def vulkan_cig_supported(self) -> bool: 

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

855 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2Sx

856  

857 @property 

858 def gpu_pci_device_id(self) -> int: 

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

860  

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

862 """ 

863 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2,w

864  

865 @property 

866 def gpu_pci_subsystem_id(self) -> int: 

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

868  

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

870 """ 

871 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2-w

872  

873 @property 

874 def host_numa_virtual_memory_management_supported(self) -> bool: 

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

876 return bool( 2-v

877 self._get_cached_attribute( 2-v

878 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2-v

879 ) 

880 ) 

881  

882 @property 

883 def host_numa_memory_pools_supported(self) -> bool: 

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

885 return bool( 2fw

886 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2fw

887 ) 

888  

889 # Start of CUDA 13 device attributes 

890  

891 @property 

892 def host_numa_multinode_ipc_supported(self) -> bool: 

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

894 return bool( 2gw

895 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2gw

896 ) 

897  

898 @property 

899 def host_memory_pools_supported(self) -> bool: 

900 """bool: Device suports HOST location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

901 return bool( 2alblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAmdw0kTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg{oWx|k2lqkl 3l!vrksk#v

902 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2alblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAmdw0kTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg{oWx|k2lqkl 3l!vrksk#v

903 ) 

904  

905 @property 

906 def host_virtual_memory_management_supported(self) -> bool: 

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

908 return bool( 2.v

909 self._get_cached_attribute( 2.v

910 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2.v

911 ) 

912 ) 

913  

914 @property 

915 def host_alloc_dma_buf_supported(self) -> bool: 

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

917 return bool( 2cw

918 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2cw

919 ) 

920  

921 @property 

922 def only_partial_host_native_atomic_supported(self) -> bool: 

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

924 return bool( 2/v

925 self._get_cached_attribute( 2/v

926 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2/v

927 ) 

928 ) 

929  

930  

931class Device: 

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

933  

934 This is a singleton object that helps ensure interoperability 

935 across multiple libraries imported in the process to both see 

936 and use the same GPU device. 

937  

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

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

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

941 this device's context. 

942  

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

944 for a specified device. 

945  

946 Note 

947 ---- 

948 Will not initialize the GPU. 

949  

950 Parameters 

951 ---------- 

952 device_id : int, optional 

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

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

955  

956 """ 

957 __slots__ = ("_device_id", "_memory_resource", "_has_inited", "_properties", "_uuid", "_context", "__weakref__") 

958  

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

960 if isinstance(device_id, Device): 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~q9Cvy!Cwy#CxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!oRC?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBSDoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT 7CXvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

961 return device_id 29C!C#C?vYx@v[v]v3k^v_v7oUy8oVy9o.l!oRCq r #o$os %o'o(o)o*o+o,o-o.o/o:ot ;o=ou Zx0xOvPvQv?o@ovAwAxAyAWejkEk;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{f(j`kSD{k3n4nHk_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkA7ClAmAH I

962  

963 Device_ensure_cuda_initialized() 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

964 device_id = Device_resolve_device_id(device_id) 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

965 devices = Device_ensure_tls_devices(cls) 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

966  

967 try: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

968 return devices[device_id] 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

969 except IndexError: 2LCMC

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

971  

972 def _check_context_initialized(self): 

973 if not self._has_inited: 29B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoJeKeLeMeNeOePeQeReSeTeUeOo'B(B5BYnrAsAtAZnuAok$k%k)B'k(k)k*k+k,k9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMAgkyk-kzkAkBkCkDkhkDe@ySCTCUCVCWCXCYCZC-CTDUD4kQCir8BZx0xly0C?o@ovAwAxAyA*B+B,B-B.B/BKkLk6B:B1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZk]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk+yukoy0v1vVDWD.CXD/CYDZD:C;C0D1D2D=C3D?C@C[C]C^C_C`C{C|C4D}C~CaDbD5DcDdD6D7D8D9DeD!DfD#D$DgDhD%D'D(DiD)DjDkDlDmDnDoDpDqDrD*DsDtDuDvD+DwDxD,D-D.D/DyD:DzD;D=DADBD?D@D[DCD]DDDEDFDGDHDIDJDKDLD^DMDNDODPD_DQDRD`D{DjkpkEkFk0kYyqkwf8CCj5nGmHmIm7nDj8nEj9nJmKmLm!nxfyf8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V MmNm1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,n%e)jOjPjQj*jzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(m6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nRj]n)m*m+m^nMfNf@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ,m-m#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aobocoqjumBlClDlvmOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knln)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokoloo p 1jmomnnnonno2joopnqnrnpo3jqosntnunro4jsovnwnxnto5juoynznAnvo6jwoBnCnDnxo7jyoEnFnGnzo8jAoHnInJnBoaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCqCJBrCsC

974 raise CUDAError( 

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

976 ) 

977  

978  

979 @classmethod 

980 def get_all_devices(cls): 

981 """ 

982 Query the available device instances. 

983  

984 Returns 

985 ------- 

986 tuple of Device 

987 A tuple containing instances of available devices. 

988 """ 

989 from cuda.core import system 2IwtCuCvCOA`v*yxCyCNw_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjA

990 total = system.get_num_devices() 2IwtCuCvCOA`v*yxCyCNw_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjA

991 return tuple(cls(device_id) for device_id in range(total)) 2IwtCuCvCOA`v*yxCyCNw_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjA

992  

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

994 """ 

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

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

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

998  

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

1000  

1001 Returns 

1002 ------- 

1003 cuda.core.system.Device 

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

1005 """ 

1006 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2%v

1007  

1008 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2%v

1009 raise RuntimeError( 

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

1011 ) 

1012  

1013 from cuda.core.system import Device as SystemDevice 2%v

1014 return SystemDevice(uuid=self.uuid) 2%v

1015  

1016 @property 

1017 def device_id(self) -> int: 

1018 """Return device ordinal.""" 

1019 return self._device_id 2[o]o'eXe(eYe)eZe*e0e+e1e,e2exmymok9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMABm7o1CUy8oVyCm9o2C.l!oRCDeq kkr #o$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oDm:o3C4Ct 5CEm;o6C4k=oQCiru Zx0xlyOvdg(yPvFmQv?o@ovAwAxAyA`vPoKkLk*ymyzAAA0v1vHwWejkwC.k/kEkFk;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{f(j`kSD{kGk3n4nHk}k~kzCACwfjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkA7ClAmACjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj0o1oH I 1j2j3j4j5j6j7j8jfz}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxgyggz

1020  

1021 @property 

1022 def pci_bus_id(self) -> str: 

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

1024 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2OAzA%v

1025 return bus_id[:12].decode() 2OAzA%v

1026  

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

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

1029  

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

1031 device and the specified peer device. 

1032  

1033 Parameters 

1034 ---------- 

1035 peer : Device | int 

1036 The peer device to check accessibility to. Can be a Device object or device ID. 

1037 """ 

1038 peer = Device(peer) 

1039 cdef int d1 = <int> self.device_id 

1040 cdef int d2 = <int> peer.device_id 

1041 if d1 == d2: 

1042 return True 

1043 cdef int value = 0 

1044 with nogil: 

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

1046 return bool(value) 

1047  

1048 @property 

1049 def uuid(self) -> str: 

1050 """Return a UUID for the device. 

1051  

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

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

1054 subscribed MIG compute instance. 

1055  

1056 Note 

1057 ---- 

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

1059 driver is older than CUDA 11.4. 

1060  

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

1062  

1063 """ 

1064 cdef cydriver.CUuuid uuid 

1065 cdef cydriver.CUdevice dev 

1066 cdef bytes uuid_b 

1067 cdef str uuid_hex 

1068  

1069 if self._uuid is None: 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvOAhz)yizjz%vAA@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZvMkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1070 dev = self._device_id 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1071 with nogil: 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1072 IF CUDA_CORE_BUILD_MAJOR == 12: 

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

1074 ELSE: # 13.0+ 

1075 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1076 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1077 uuid_hex = uuid_b.hex() 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1078 # 8-4-4-4-12 

1079 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1080 return self._uuid 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvOAhz)yizjz%vAA@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZvMkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1081  

1082 @property 

1083 def name(self) -> str: 

1084 """Return the device name.""" 

1085 # Use 256 characters to be consistent with CUDA Runtime 

1086 cdef int LENGTH = 256 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1087 cdef bytes name = bytes(LENGTH) 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1088 cdef char* name_ptr = name 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1089 cdef cydriver.CUdevice this_dev = self._device_id 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1090 with nogil: 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1091 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1092 name = name.split(b"\0")[0] 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1093 return name.decode() 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk

1094  

1095 @property 

1096 def properties(self) -> DeviceProperties: 

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

1098 if self._properties is None: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq @y9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPoHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

1099 self._properties = DeviceProperties._init(self._device_id) 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

1100  

1101 return self._properties 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq @y9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPoHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf

1102  

1103 @property 

1104 def compute_capability(self) -> ComputeCapability: 

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

1106 cdef DeviceProperties prop = self.properties 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkDe@y2nPoJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^btB_buB`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS zeAeBeCe

1107 if "compute_capability" in prop._cache: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkDe@y2nPoJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^btB_buB`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS zeAeBeCe

1108 return prop._cache["compute_capability"] 2a Xx?vYx@v[v]v3k^v_vJwKwLwDe@y2nZkIk6A+y1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^btB_buB`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcHcIcJcKcLcb c K L j k v w ( McNc) x y * OcPcQcRcSc+ , TcUcVcHdWcXc- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8cM N Nd9cOd!cd e O P 2 3 B C | %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd:c;ccb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cQ R ~cadbdcdddedfd0dgd1dhdidjdkdldmdndodpdqdrdsdtdudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS

1109 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPoJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe

1110 prop._cache["compute_capability"] = cc 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPoJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe

1111 return cc 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPoJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe

1112  

1113 @property 

1114 def arch(self) -> str: 

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

1116 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a ?vYx@v[v]v3k^v_vJwKwLw2nZk+yCAnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcHcIcJcKcLcb c K L j k v w ( McNc) x y * OcPcQcRcSc+ , TcUcVcWcXc- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8cM N 9c!cd e O P 2 3 B C | %c'c} D E ~ (c)c*c+c,cabbb-c.c/c:c;ccb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cQ R ~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS

1117  

1118 @property 

1119 def context(self) -> Context: 

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

1121  

1122 Note 

1123 ---- 

1124 Device must be initialized. 

1125  

1126 """ 

1127 self._check_context_initialized() 25n9n1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,n)jvltm]n#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aobocoumElwmmoooqosouowoyoAo

1128 return self._context 25n9n1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,n)jvltm]n#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aobocoumElwmmoooqosouowoyoAo

1129  

1130 @property 

1131 def memory_resource(self) -> MemoryResource: 

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

1133 cdef int attr, device_id 

1134 if self._memory_resource is None: 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyggz

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

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

1137 device_id = self._device_id 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz

1138 with nogil: 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz

1139 HANDLE_RETURN( 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz

1140 cydriver.cuDeviceGetAttribute( 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz

1141 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1142 ) 

1143 ) 

1144 if attr == 1: 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz

1145 from cuda.core._memory import DeviceMemoryResource 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz

1146 self._memory_resource = DeviceMemoryResource(self._device_id) 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz

1147 else: 

1148 from cuda.core._memory._legacy import _SynchronousMemoryResource 

1149 self._memory_resource = _SynchronousMemoryResource(self._device_id) 

1150  

1151 return self._memory_resource 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyggz

1152  

1153 @memory_resource.setter 

1154 def memory_resource(self, mr): 

1155 from cuda.core._memory import MemoryResource 

1156 assert_type(mr, MemoryResource) 

1157 self._memory_resource = mr 

1158  

1159 @property 

1160 def default_stream(self) -> Stream: 

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

1162  

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

1164 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1165  

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

1167 the legacy stream. 

1168  

1169 """ 

1170 return default_stream() 21x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xBC

1171  

1172 def __int__(self): 

1173 """Return device_id.""" 

1174 return self._device_id 2'C(C)CKkLk

1175  

1176 def __repr__(self): 

1177 return f"<Device {self._device_id} ({self.name})>" 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxWk

1178  

1179 def __hash__(self) -> int: 

1180 return hash(self.uuid) 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvhz)yizjz@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZvMkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk

1181  

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

1183 if not isinstance(other, Device): 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvRvSvTvUvVvWvJC)yKCNC@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZv6n.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoH I o p mknkJB

1184 return NotImplemented 2NC6n.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoJB

1185 return self._device_id == other._device_id 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvRvSvTvUvVvWvJC)yKC@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZv6nH I o p mknk

1186  

1187 def __reduce__(self): 

1188 return Device, (self.device_id,) 2Bm1CUyVyCm2C.lRCDekkDCECFCGCHCICDm3C4C5CEm6C4kQCirZx0xly(yFm?o@ovAwAxAyA0o1o

1189  

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

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

1192  

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

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

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

1196  

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

1198  

1199 Parameters 

1200 ---------- 

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

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

1203  

1204 Returns 

1205 ------- 

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

1207 Popped context. 

1208  

1209 Examples 

1210 -------- 

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

1212 calling this method, e.g. 

1213  

1214 >>> from cuda.core import Device 

1215 >>> dev0 = Device(0) 

1216 >>> dev0.set_current() 

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

1218  

1219 """ 

1220 cdef ContextHandle h_context 

1221 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1222  

1223 if ctx is not None: 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1224 # TODO: revisit once Context is cythonized 

1225 assert_type(ctx, Context) 

1226 if ctx._device_id != self._device_id: 

1227 raise RuntimeError( 

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

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

1230 ) 

1231 # prev_ctx is the previous context 

1232 curr_ctx = as_cu(ctx._h_context) 

1233 prev_ctx = NULL 

1234 with nogil: 

1235 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 

1236 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 

1237 self._has_inited = True 

1238 self._context = ctx # Store owning context reference 

1239 if prev_ctx != NULL: 

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

1241 else: 

1242 # use primary ctx 

1243 h_context = get_primary_context(self._device_id) 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1244 if h_context.get() == NULL: 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

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

1246 with nogil: 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1247 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1248 self._has_inited = True 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1249 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1250  

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

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

1253  

1254 Note 

1255 ---- 

1256 The newly context will not be set as current. 

1257  

1258 Parameters 

1259 ---------- 

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

1261 Customizable dataclass for context creation options. 

1262  

1263 Returns 

1264 ------- 

1265 :obj:`~_context.Context` 

1266 Newly created context object. 

1267  

1268 """ 

1269 raise NotImplementedError("WIP: https://github.com/NVIDIA/cuda-python/issues/189") 

1270  

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

1272 """Create a Stream object. 

1273  

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

1275  

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

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

1278  

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

1280 such that the lifetime is managed. 

1281  

1282 Note 

1283 ---- 

1284 Device must be initialized. 

1285  

1286 Parameters 

1287 ---------- 

1288 obj : :obj:`~_stream.IsStreamT`, optional 

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

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

1291 Customizable dataclass for stream creation options. 

1292  

1293 Returns 

1294 ------- 

1295 :obj:`~_stream.Stream` 

1296 Newly created stream object. 

1297  

1298 """ 

1299 self._check_context_initialized() 29B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoOo'B(BsAtAok$k%k)B'k(k)k*k+k,k9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMAgkyk-kzkAkBkCkDkhkDe@ySCTCUCVCWCXCYCZC-CTDUD4kQCir8BZx0xly0C?o@ovAwAxAyA*B+B,B-B.B/B:B1kJ lk;B=B?B@B[B]B2k^B_B`B{B|B}B~BZk]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk+yukoyVDWD.CXD/CYDZD:C;C0D1D2D=C3D?C@C[C]C^C_C`C{C|C4D}C~CaDbD5DcDdD6D7D8D9DeD!DfD#D$DgDhD%D'D(DiD)DjDkDlDmDnDoDpDqDrD*DsDtDuDvD+DwDxD,D-D.D/DyD:DzD;D=DADBD?D@D[DCD]DDDEDFDGDHDIDJDKDLD^DMDNDODPD_DQDRD`D{DjkpkYyqkwf8C7n8n!n*j6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[n^nvm)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokoloo p noporotovoxozoBoaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCqCJBrCsC

1300 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 29B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoOo'B(BsAtAok$k%k)B'k(k)k*k+k,k9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMAgkyk-kzkAkBkCkDkhkDe@ySCTCUCVCWCXCYCZC-CTDUD4kQCir8BZx0xly0C?o@ovAwAxAyA*B+B,B-B.B/B:B1kJ lk;B=B?B@B[B]B2k^B_B`B{B|B}B~BZk]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk+yukoyVDWD.CXD/CYDZD:C;C0D1D2D=C3D?C@C[C]C^C_C`C{C|C4D}C~CaDbD5DcDdD6D7D8D9DeD!DfD#D$DgDhD%D'D(DiD)DjDkDlDmDnDoDpDqDrD*DsDtDuDvD+DwDxD,D-D.D/DyD:DzD;D=DADBD?D@D[DCD]DDDEDFDGDHDIDJDKDLD^DMDNDODPD_DQDRD`D{DjkpkYyqkwf8C7n8n!n*j6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[n^nvm)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokoloo p noporotovoxozoBoaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCqCJBrCsC

1301  

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

1303 """Create an Event object without recording it to a Stream. 

1304  

1305 Note 

1306 ---- 

1307 Device must be initialized. 

1308  

1309 Parameters 

1310 ---------- 

1311 options : :obj:`EventOptions`, optional 

1312 Customizable dataclass for event creation options. 

1313  

1314 Returns 

1315 ------- 

1316 :obj:`~_event.Event` 

1317 Newly created event object. 

1318  

1319 """ 

1320 self._check_context_initialized() 2qAJeKeLeMeNeOePeQeReSeTeUe5BYnrAsAtAZnuAok-C6Blk7BtyBAGmHmImJmKmLmxfyfbjcjU V MmNmtlulOjPjQjzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(mwlxlyl)m*m+mMfNfejfj0 1 ,m-mzlAlBlClDlOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knlnuyFlGlmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJn

1321 cdef Context ctx = self._context 2qAJeKeLeMeNeOePeQeReSeTeUe5BYnrAsAtAZnuAok-C6Blk7BtyBAGmHmImJmKmLmxfyfbjcjU V MmNmtlulOjPjQjzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(mwlxlyl)m*m+mMfNfejfj0 1 ,m-mzlAlBlClDlOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knlnuyFlGlmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJn

1322 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2qAJeKeLeMeNeOePeQeReSeTeUe5BYnrAsAtAZnuAok-C6Blk7BtyBAGmHmImJmKmLmxfyfbjcjU V MmNmtlulOjPjQjzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(mwlxlyl)m*m+mMfNfejfj0 1 ,m-mzlAlBlClDlOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knlnuyFlGlmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJn

1323  

1324 def allocate(self, size, stream: Stream | GraphBuilder | None = None) -> Buffer: 

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

1326  

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

1328 using the memory resource currently associated with this Device. 

1329  

1330 Parameter `stream` is optional, using a default stream by default. 

1331  

1332 Note 

1333 ---- 

1334 Device must be initialized. 

1335  

1336 Parameters 

1337 ---------- 

1338 size : int 

1339 Number of bytes to allocate. 

1340 stream : :obj:`~_stream.Stream`, optional 

1341 The stream establishing the stream ordering semantic. 

1342 Default value of `None` uses default stream. 

1343  

1344 Returns 

1345 ------- 

1346 :obj:`~_memory.Buffer` 

1347 Newly created buffer object. 

1348  

1349 """ 

1350 self._check_context_initialized() 2KkLk0v1vCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8j

1351 return self.memory_resource.allocate(size, stream) 2KkLk0v1vCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8j

1352  

1353 def sync(self): 

1354 """Synchronize the device. 

1355  

1356 Note 

1357 ---- 

1358 Device must be initialized. 

1359  

1360 """ 

1361 self._check_context_initialized() 2?o@ovAwAxAyAKkLktknyukoy.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDjkpkEkFk0kqk

1362 handle_return(runtime.cudaDeviceSynchronize()) 2?o@ovAwAxAyAKkLktknyukoy.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDjkpkEkFk0kqk

1363  

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

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

1366  

1367 Returns 

1368 ------- 

1369 :obj:`~graph.GraphBuilder` 

1370 Newly created graph builder object. 

1371  

1372 """ 

1373 from cuda.core.graph._graph_builder import GraphBuilder 2oAvk+jpA,jwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk9C!C#C*C+C,C?v@v[v]v^v_vJwKwLw'C(C)CKALAMAgkykzkAkBkCkDkhk

1374  

1375 self._check_context_initialized() 2oAvk+jpA,jwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk9C!C#C*C+C,C?v@v[v]v^v_vJwKwLw'C(C)CKALAMAgkykzkAkBkCkDkhk

1376 return GraphBuilder._init(stream=self.create_stream(), is_stream_owner=True) 2oAvk+jpA,jwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk9C!C#C*C+C,C?v@v[v]v^v_vJwKwLw'C(C)CKALAMAgkykzkAkBkCkDkhk

1377  

1378  

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

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

1381 global _is_cuInit 

1382 if _is_cuInit is False: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1383 with _lock, nogil: 

1384 HANDLE_RETURN(cydriver.cuInit(0)) 

1385 _is_cuInit = True 

1386 try: 

1387 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1388 except ImportError: 

1389 pass 

1390 else: 

1391 warn_if_cuda_major_version_mismatch() 

1392 return 0 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1393  

1394  

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

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

1397 cdef cydriver.CUdevice dev 

1398 cdef cydriver.CUcontext ctx 

1399 cdef cydriver.CUresult err 

1400 if device_id is None: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1401 with nogil: 2a $v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B2nPoKkLk6B:BHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjtknyIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnzozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zsmYy{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbzCVbACWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS nABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg

1402 err = cydriver.cuCtxGetDevice(&dev) 2a $v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B2nPoKkLk6B:BHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjtknyIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnzozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zsmYy{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbzCVbACWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS nABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg

1403 if err == cydriver.CUresult.CUDA_SUCCESS: 2a $v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B2nPoKkLk6B:BHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjtknyIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnzozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zsmYy{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbzCVbACWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS nABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg

1404 return int(dev) 2$v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B6B:B7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjnyIk1n6A+y1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzoylzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]zHwjkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zYy{k|k2lqkl 3l!vrksk#vGk3n4nHk4l}kTb~kUbzCVbACWbwfXb5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l*l+l,l-lDAEAnABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y=y?y

1405 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1406 with nogil: 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg

1407 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg

1408 assert <void*>(ctx) == NULL 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg

1409 return 0 # cudart behavior 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg

1410 else: 

1411 HANDLE_RETURN(err) 

1412 elif device_id < 0: 2a }o~oapbp+jcpdp,jepfpgphp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQpRpSpTpCoUpDoVpEoWpFoXpYpZp0p1p2o2p3o3p4p5p6p7p8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqPq6oQqRqOoSq{vIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!qYn#qrA$q%q'qZn(quA)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarbrcrNAdrerfrgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`vjrkrlrmrPAnrQAKkLkRASAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAUxjz0ANC1A2ABA3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezIkCr5A7A8AnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQo0v1vDr!AEr#AFr$AHw%A'A(AGr)A*A+AHr,A-A.AIrJrKrLr/A:A;A=A?A@A[A]AMr^A_A`ANr{A|AOr}APrQr~ARraBbBSrTrUrcBVrdBeBfBgBhBiBWrjBXrkBlBmBYrZr0rnB1r2roBpBqB3r4rrBoh5r6r7r8r9rsBGkxCyCNw!r#rTb$rUbVbWbwf%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS FuGuHuHBIuJuKuLuMuIBNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

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

1414 return device_id 2a }o~oapbp+jcpdp,jepfpgphp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQpRpSpTpCoUpDoVpEoWpFoXpYpZp0p1p2o2p3o3p4p5p6p7p8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqPq6oQqRqOoSq{vIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!qYn#qrA$q%q'qZn(quA)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarbrcrNAdrerfrgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`vjrkrlrmrPAnrQAKkLkRASAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAUxjz0ANC1A2ABA3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezIkCr5A7A8AnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQo0v1vDr!AEr#AFr$AHw%A'A(AGr)A*A+AHr,A-A.AIrJrKrLr/A:A;A=A?A@A[A]AMr^A_A`ANr{A|AOr}APrQr~ARraBbBSrTrUrcBVrdBeBfBgBhBiBWrjBXrkBlBmBYrZr0rnB1r2roBpBqB3r4rrBoh5r6r7r8r9rsBGkxCyCNw!r#rTb$rUbVbWbwf%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS FuGuHuHBIuJuKuLuMuIBNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1415  

1416  

1417cdef inline list Device_ensure_tls_devices(cls): 

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

1419 cdef int total 

1420 try: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1421 return _tls.devices 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B

1422 except AttributeError: 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1423 with nogil: 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1424 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1425 devices = _tls.devices = [] 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1426 for dev_id in range(total): 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1427 device = super(Device, cls).__new__(cls) 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1428 device._device_id = dev_id 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1429 device._memory_resource = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1430 device._has_inited = False 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1431 device._properties = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1432 device._uuid = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1433 device._context = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1434 devices.append(device) 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv

1435 return devices 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv