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

419 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-25 01:07 +0000

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

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8from libc.stdint cimport uintptr_t 

9  

10from cuda.bindings cimport cydriver 

11from cuda.core._utils.cuda_utils cimport HANDLE_RETURN 

12  

13import threading 

14  

15from cuda.core._context cimport Context 

16from cuda.core._context import ContextOptions 

17from cuda.core._event cimport Event as cyEvent 

18from cuda.core._event import Event, EventOptions 

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._graph import GraphBuilder 

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

28from cuda.core._utils.clear_error_support import assert_type 

29from cuda.core._utils.cuda_utils import ( 

30 ComputeCapability, 

31 CUDAError, 

32 driver, 

33 handle_return, 

34 runtime, 

35) 

36from cuda.core._stream cimport default_stream 

37  

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

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

40_tls = threading.local() 

41_lock = threading.Lock() 

42cdef bint _is_cuInit = False 

43  

44  

45cdef class DeviceProperties: 

46 """ 

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

48  

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

50 """ 

51 cdef: 

52 int _handle 

53 dict _cache 

54  

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

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

57  

58 @classmethod 

59 def _init(cls, handle): 

60 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a UkVk^j_j`j7kWkqo{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmuk'k(kRnXkvkq r j :fQ mjrhnjojxjyjzjpjqjAjBjrjCjshDjG YkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e4kWe:jplqlrl)k*kslwkAkBkZk+k,k]f-k^f_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylzlmvAlnvBl~fagClbgDlElcgFldgGlegHlfgIlJl=kKlEoLl3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5eXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCewfxf

61 self._handle = handle 2a UkVk^j_j`j7kWkqo{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmuk'k(kRnXkvkq r j :fQ mjrhnjojxjyjzjpjqjAjBjrjCjshDjG YkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e4kWe:jplqlrl)k*kslwkAkBkZk+k,k]f-k^f_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylzlmvAlnvBl~fagClbgDlElcgFldgGlegHlfgIlJl=kKlEoLl3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5eXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCewfxf

62 self._cache = {} 2a UkVk^j_j`j7kWkqo{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmuk'k(kRnXkvkq r j :fQ mjrhnjojxjyjzjpjqjAjBjrjCjshDjG YkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e4kWe:jplqlrl)k*kslwkAkBkZk+k,k]f-k^f_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylzlmvAlnvBl~fagClbgDlElcgFldgGlegHlfgIlJl=kKlEoLl3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5eXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCewfxf

63 return self 2a UkVk^j_j`j7kWkqo{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmuk'k(kRnXkvkq r j :fQ mjrhnjojxjyjzjpjqjAjBjrjCjshDjG YkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e4kWe:jplqlrl)k*kslwkAkBkZk+k,k]f-k^f_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylzlmvAlnvBl~fagClbgDlElcgFldgGlegHlfgIlJl=kKlEoLl3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5eXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCewfxf

64  

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

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

67 cdef int val 

68 cdef cydriver.CUresult err 

69 with nogil: 2a UkVk^j_j`j7kWkqo5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvkEj'jDeq py(jr )j;jzkj :f*jQ SnGo}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHlfgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

70 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a UkVk^j_j`j7kWkqo5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvkEj'jDeq py(jr )j;jzkj :f*jQ SnGo}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHlfgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

71 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a UkVk^j_j`j7kWkqo5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvkEj'jDeq py(jr )j;jzkj :f*jQ SnGo}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHlfgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

72 return <int>default 

73 HANDLE_RETURN(err) 2a UkVk^j_j`j7kWkqo5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvkEj'jDeq py(jr )j;jzkj :f*jQ SnGo}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHlfgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

74 return val 2a UkVk^j_j`j7kWkqo5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvkEj'jDeq py(jr )j;jzkj :f*jQ SnGo}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHlfgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

75  

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

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

78 if attr not in self._cache: 2a UkVk^j_j`j7kWk4x5x6x7x8xqo9x!x#x$x%x5k'x(x)x*x+x,x-x.x/x:x;x=x{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvk1o@kEj'j2o[k3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ SnGo}v~vawbwmjrhDvcwdwewnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jcvdvthevuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

79 self._cache[attr] = self._get_attribute(attr, default) 2a UkVk^j_j`j7kWkqo5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvkEj'jDeq (jr )j;jzkj :f*jQ SnGo}v~vawbwmjrhDvcwdwewnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHlfgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

80 return self._cache[attr] 2a UkVk^j_j`j7kWk4x5x6x7x8xqo9x!x#x$x%x5k'x(x)x*x+x,x-x.x/x:x;x=x{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRnXkvk1o@kEj'j2o[k3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ SnGo}v~vawbwmjrhDvcwdwewnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?b@b[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jcvdvthevuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

81  

82 @property 

83 def max_threads_per_block(self) -> int: 

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

85 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2Lw7v8v9v!v#v$vRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8uxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRx

86  

87 @property 

88 def max_block_dim_x(self) -> int: 

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

90 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2Aw

91  

92 @property 

93 def max_block_dim_y(self) -> int: 

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

95 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2Bw

96  

97 @property 

98 def max_block_dim_z(self) -> int: 

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

100 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2Cw

101  

102 @property 

103 def max_grid_dim_x(self) -> int: 

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

105 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2EwDk

106  

107 @property 

108 def max_grid_dim_y(self) -> int: 

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

110 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2Fw

111  

112 @property 

113 def max_grid_dim_z(self) -> int: 

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

115 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2a Gw

116  

117 @property 

118 def max_shared_memory_per_block(self) -> int: 

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

120 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2Kw7v8v9v!v#v$vRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8uxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRx

121  

122 @property 

123 def total_constant_memory(self) -> int: 

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

125 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2=w

126  

127 @property 

128 def warp_size(self) -> int: 

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

130 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2Dj

131  

132 @property 

133 def max_pitch(self) -> int: 

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

135 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2Iw

136  

137 @property 

138 def maximum_texture1d_width(self) -> int: 

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

140 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2Vw

141  

142 @property 

143 def maximum_texture1d_linear_width(self) -> int: 

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

145 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2Uw

146  

147 @property 

148 def maximum_texture1d_mipmapped_width(self) -> int: 

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

150 return self._get_cached_attribute( 2Vv

151 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2Vv

152 ) 

153  

154 @property 

155 def maximum_texture2d_width(self) -> int: 

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

157 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 23w

158  

159 @property 

160 def maximum_texture2d_height(self) -> int: 

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

162 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2Yw

163  

164 @property 

165 def maximum_texture2d_linear_width(self) -> int: 

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

167 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 22w

168  

169 @property 

170 def maximum_texture2d_linear_height(self) -> int: 

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

172 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 20w

173  

174 @property 

175 def maximum_texture2d_linear_pitch(self) -> int: 

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

177 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 21w

178  

179 @property 

180 def maximum_texture2d_mipmapped_width(self) -> int: 

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

182 return self._get_cached_attribute( 2pj

183 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2pj

184 ) 

185  

186 @property 

187 def maximum_texture2d_mipmapped_height(self) -> int: 

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

189 return self._get_cached_attribute( 2Yv

190 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2Yv

191 ) 

192  

193 @property 

194 def maximum_texture3d_width(self) -> int: 

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

196 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 26w

197  

198 @property 

199 def maximum_texture3d_height(self) -> int: 

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

201 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 25w

202  

203 @property 

204 def maximum_texture3d_depth(self) -> int: 

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

206 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 24w

207  

208 @property 

209 def maximum_texture3d_width_alternate(self) -> int: 

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

211 return self._get_cached_attribute( 20v

212 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 20v

213 ) 

214  

215 @property 

216 def maximum_texture3d_height_alternate(self) -> int: 

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

218 return self._get_cached_attribute( 2Zv

219 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2Zv

220 ) 

221  

222 @property 

223 def maximum_texture3d_depth_alternate(self) -> int: 

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

225 return self._get_cached_attribute( 2qj

226 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2qj

227 ) 

228  

229 @property 

230 def maximum_texturecubemap_width(self) -> int: 

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

232 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 27w

233  

234 @property 

235 def maximum_texture1d_layered_width(self) -> int: 

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

237 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2Tw

238  

239 @property 

240 def maximum_texture1d_layered_layers(self) -> int: 

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

242 return self._get_cached_attribute( 2Uv

243 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2Uv

244 ) 

245  

246 @property 

247 def maximum_texture2d_layered_width(self) -> int: 

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

249 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2Zw

250  

251 @property 

252 def maximum_texture2d_layered_height(self) -> int: 

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

254 return self._get_cached_attribute( 2Wv

255 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2Wv

256 ) 

257  

258 @property 

259 def maximum_texture2d_layered_layers(self) -> int: 

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

261 return self._get_cached_attribute( 2Xv

262 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2Xv

263 ) 

264  

265 @property 

266 def maximum_texturecubemap_layered_width(self) -> int: 

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

268 return self._get_cached_attribute( 22v

269 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 22v

270 ) 

271  

272 @property 

273 def maximum_texturecubemap_layered_layers(self) -> int: 

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

275 return self._get_cached_attribute( 21v

276 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 21v

277 ) 

278  

279 @property 

280 def maximum_surface1d_width(self) -> int: 

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

282 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2Nw

283  

284 @property 

285 def maximum_surface2d_width(self) -> int: 

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

287 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2Pw

288  

289 @property 

290 def maximum_surface2d_height(self) -> int: 

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

292 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2yj

293  

294 @property 

295 def maximum_surface3d_width(self) -> int: 

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

297 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2zj

298  

299 @property 

300 def maximum_surface3d_height(self) -> int: 

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

302 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2Rw

303  

304 @property 

305 def maximum_surface3d_depth(self) -> int: 

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

307 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2Qw

308  

309 @property 

310 def maximum_surface1d_layered_width(self) -> int: 

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

312 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2xj

313  

314 @property 

315 def maximum_surface1d_layered_layers(self) -> int: 

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

317 return self._get_cached_attribute( 2Pv

318 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2Pv

319 ) 

320  

321 @property 

322 def maximum_surface2d_layered_width(self) -> int: 

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

324 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2Ow

325  

326 @property 

327 def maximum_surface2d_layered_height(self) -> int: 

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

329 return self._get_cached_attribute( 2Qv

330 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2Qv

331 ) 

332  

333 @property 

334 def maximum_surface2d_layered_layers(self) -> int: 

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

336 return self._get_cached_attribute( 2Rv

337 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2Rv

338 ) 

339  

340 @property 

341 def maximum_surfacecubemap_width(self) -> int: 

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

343 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2Sw

344  

345 @property 

346 def maximum_surfacecubemap_layered_width(self) -> int: 

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

348 return self._get_cached_attribute( 2Tv

349 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2Tv

350 ) 

351  

352 @property 

353 def maximum_surfacecubemap_layered_layers(self) -> int: 

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

355 return self._get_cached_attribute( 2Sv

356 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2Sv

357 ) 

358  

359 @property 

360 def max_registers_per_block(self) -> int: 

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

362 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2Jw

363  

364 @property 

365 def clock_rate(self) -> int: 

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

367 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2DepyZxG Ck

368  

369 @property 

370 def texture_alignment(self) -> int: 

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

372 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2:w

373  

374 @property 

375 def texture_pitch_alignment(self) -> int: 

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

377 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2;w

378  

379 @property 

380 def gpu_overlap(self) -> bool: 

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

382 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2pw

383  

384 @property 

385 def multiprocessor_count(self) -> int: 

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

387 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2)wDk

388  

389 @property 

390 def kernel_exec_timeout(self) -> bool: 

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

392 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 21x

393  

394 @property 

395 def integrated(self) -> bool: 

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

397 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2uw

398  

399 @property 

400 def can_map_host_memory(self) -> bool: 

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

402 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2aw

403  

404 @property 

405 def compute_mode(self) -> int: 

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

407 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 20x

408  

409 @property 

410 def concurrent_kernels(self) -> bool: 

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

412 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2fw

413  

414 @property 

415 def ecc_enabled(self) -> bool: 

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

417 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2kw

418  

419 @property 

420 def pci_bus_id(self) -> int: 

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

422 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2-w

423  

424 @property 

425 def pci_device_id(self) -> int: 

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

427 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2.w

428  

429 @property 

430 def pci_domain_id(self) -> int: 

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

432 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2Bj

433  

434 @property 

435 def tcc_driver(self) -> bool: 

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

437 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2/w

438  

439 @property 

440 def memory_clock_rate(self) -> int: 

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

442 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 22x

443  

444 @property 

445 def global_memory_bus_width(self) -> int: 

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

447 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2mw

448  

449 @property 

450 def l2_cache_size(self) -> int: 

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

452 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2ww

453  

454 @property 

455 def max_threads_per_multiprocessor(self) -> int: 

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

457 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2Mw7v8v9v!v#v$vRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u

458  

459 @property 

460 def unified_addressing(self) -> bool: 

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

462 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a ?w

463  

464 @property 

465 def compute_capability_major(self) -> int: 

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

467 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a UkVk^j_j`j7kWk5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk8kUoVo9k!k#k$k%kWoCnDn0dud1dvd2dwd3dxd4dyd5dzdXo%jYoZoEnFnGnHnInJnKnLnMnNnOnhmQuuk'k(kRnXkvkDeSnGodwG YkCkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP zeAeBeCe

468  

469 @property 

470 def compute_capability_minor(self) -> int: 

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

472 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a UkVk^j_j`j7kWk5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk8kUoVo9k!k#k$k%kWoCnDn0dud1dvd2dwd3dxd4dyd5dzdXo%jYoZoEnFnGnHnInJnKnLnMnNnOnhmQuuk'k(kRnXkvkDeSnGoewG YkCkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP zeAeBeCe

473  

474 @property 

475 def global_l1_cache_supported(self) -> bool: 

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

477 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2lw

478  

479 @property 

480 def local_l1_cache_supported(self) -> bool: 

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

482 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2xw

483  

484 @property 

485 def max_shared_memory_per_multiprocessor(self) -> int: 

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

487 return self._get_cached_attribute( 2Ov7v8v9v!v#v$vRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u

488 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2Ov7v8v9v!v#v$vRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u

489 ) 

490  

491 @property 

492 def max_registers_per_multiprocessor(self) -> int: 

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

494 return self._get_cached_attribute( 2MvRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u

495 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2MvRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u

496 ) 

497  

498 @property 

499 def managed_memory(self) -> bool: 

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

501 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2yw

502  

503 @property 

504 def multi_gpu_board(self) -> bool: 

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

506 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2%w

507  

508 @property 

509 def multi_gpu_board_group_id(self) -> int: 

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

511 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2'w

512  

513 @property 

514 def host_native_atomic_supported(self) -> bool: 

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

516 return bool( 2Jv

517 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2Jv

518 ) 

519  

520 @property 

521 def single_to_double_precision_perf_ratio(self) -> int: 

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

523 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 23x

524  

525 @property 

526 def pageable_memory_access(self) -> bool: 

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

528 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2,w

529  

530 @property 

531 def concurrent_managed_access(self) -> bool: 

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

533 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2XeYeZe0e1e2egwHo;eplqlrl)k*ksl(owkBktlhvulivvljvwlkvxllvylwxzlmvAlnvIl*o

534  

535 @property 

536 def compute_preemption_supported(self) -> bool: 

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

538 return bool( 2nj

539 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2nj

540 ) 

541  

542 @property 

543 def can_use_host_pointer_for_registered_mem(self) -> bool: 

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

545 return bool( 2rh

546 self._get_cached_attribute( 2rh

547 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2rh

548 ) 

549 ) 

550  

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

552  

553 @property 

554 def cooperative_launch(self) -> bool: 

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

556 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2hwDk

557  

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

559  

560 @property 

561 def max_shared_memory_per_block_optin(self) -> int: 

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

563 return self._get_cached_attribute( 2Nv

564 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2Nv

565 ) 

566  

567 @property 

568 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

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

570 return bool( 2Av

571 self._get_cached_attribute( 2Av

572 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2Av

573 ) 

574 ) 

575  

576 @property 

577 def direct_managed_mem_access_from_host(self) -> bool: 

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

579 return bool( 2tv

580 self._get_cached_attribute( 2tv

581 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2tv

582 ) 

583 ) 

584  

585 @property 

586 def virtual_memory_management_supported(self) -> bool: 

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

588 return bool( 2sh6d0k1k7dVe

589 self._get_cached_attribute( 2sh6d0k1k7dVe

590 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2sh6d0k1k7dVe

591 ) 

592 ) 

593  

594 @property 

595 def handle_type_posix_file_descriptor_supported(self) -> bool: 

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

597 return bool( 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ vv=jcvdvevE F o p

598 self._get_cached_attribute( 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ vv=jcvdvevE F o p

599 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ vv=jcvdvevE F o p

600 ) 

601 ) 

602  

603 @property 

604 def handle_type_win32_handle_supported(self) -> bool: 

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

606 return bool( 2Gv

607 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2Gv

608 ) 

609  

610 @property 

611 def handle_type_win32_kmt_handle_supported(self) -> bool: 

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

613 return bool( 2wv

614 self._get_cached_attribute( 2wv

615 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2wv

616 ) 

617 ) 

618  

619 @property 

620 def max_blocks_per_multiprocessor(self) -> int: 

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

622 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2Dw

623  

624 @property 

625 def generic_compression_supported(self) -> bool: 

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

627 return bool( 2oj

628 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2oj

629 ) 

630  

631 @property 

632 def max_persisting_l2_cache_size(self) -> int: 

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

634 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2Hw

635  

636 @property 

637 def max_access_policy_window_size(self) -> int: 

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

639 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2zw

640  

641 @property 

642 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

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

644 return bool( 2uv

645 self._get_cached_attribute( 2uv

646 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2uv

647 ) 

648 ) 

649  

650 @property 

651 def reserved_shared_memory_per_block(self) -> int: 

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

653 return self._get_cached_attribute( 23v

654 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 23v

655 ) 

656  

657 @property 

658 def sparse_cuda_array_supported(self) -> bool: 

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

660 return bool( 24v

661 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 24v

662 ) 

663  

664 @property 

665 def read_only_host_register_supported(self) -> bool: 

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

667 return bool( 2rj

668 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2rj

669 ) 

670  

671 @property 

672 def memory_pools_supported(self) -> bool: 

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

674 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 24x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouovowoxoyozoAoBoCo@v[v]v^v_v`v+eXeJgJeKeKgudLgMgNgOgPg,eYeQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe8gNeOe9gwd!g#g$g%g'g.e0e(gPeQe)gxd*g+g,g-g.g/e1e/gReSe:gyd;g=g?g@g[g:e2e]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqh{v|vgmPnQn1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ #wHo;e4kWe:jplqlrl)k*ksl(owkAkBk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvfgIl=k*oEo=jcvdvthevuhvhwhxhyhzhAhBhChDhAdzfAfEhFhGhHhBdIhJhKhLh5 6 7 8 9 MhNhOhPhQh3f4f5f6f7fEeFeGeHeIeRhCdBfCfShThUhVhDdWhXhYhZhDfEfFfGfHfEdIfJf0h1h2h3h4h5h6h7h8h9h!h#h$ % ' ( ) GdHdId$h%h'h(h)hJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* + , - . [h]h^h_h`h8f9f!f#f$f{h|h}h~haiNdOfPfbicidieiOdfigihiii; = ? @ [ jikilimini%f'f(f)f*f;f=f?f@f[foiPdQfRfpiqirisiQdtiuiviwiSfTfUfVfWfRdXfYfxiyiziAiBiCiDiEiFiGiHiIi_ ` { | } TdUdVdJiKiLiMiNiWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ abbbcbdbZi0i1i2iFo+f,f-f.f/fE F o p 3i4i5i6i7i8i9i!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~iajbjcjdjejfj

675  

676 @property 

677 def gpu_direct_rdma_supported(self) -> bool: 

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

679 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2nw7dVe

680  

681 @property 

682 def gpu_direct_rdma_flush_writes_options(self) -> int: 

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

684 return self._get_cached_attribute( 2Ev

685 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2Ev

686 ) 

687  

688 @property 

689 def gpu_direct_rdma_writes_ordering(self) -> int: 

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

691 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2ow

692  

693 @property 

694 def mempool_supported_handle_types(self) -> int: 

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

696 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2Aj

697  

698 @property 

699 def deferred_mapping_cuda_array_supported(self) -> bool: 

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

701 return bool( 2sv

702 self._get_cached_attribute( 2sv

703 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2sv

704 ) 

705 ) 

706  

707 @property 

708 def numa_config(self) -> int: 

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

710 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2*w

711  

712 @property 

713 def numa_id(self) -> int: 

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

715 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2+w

716  

717 @property 

718 def multicast_supported(self) -> bool: 

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

720 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2(w

721  

722 @property 

723 def surface_alignment(self) -> int: 

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

725 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2Cj

726  

727 @property 

728 def async_engine_count(self) -> int: 

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

730 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2}v

731  

732 @property 

733 def can_tex2d_gather(self) -> bool: 

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

735 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2bw

736  

737 @property 

738 def maximum_texture2d_gather_width(self) -> int: 

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

740 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2Xw

741  

742 @property 

743 def maximum_texture2d_gather_height(self) -> int: 

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

745 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2Ww

746  

747 @property 

748 def stream_priorities_supported(self) -> bool: 

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

750 return bool( 25v

751 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 25v

752 ) 

753  

754 @property 

755 def can_flush_remote_writes(self) -> bool: 

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

757 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2~v

758  

759 @property 

760 def host_register_supported(self) -> bool: 

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

762 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2tw

763  

764 @property 

765 def timeline_semaphore_interop_supported(self) -> bool: 

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

767 return bool( 2Bv

768 self._get_cached_attribute( 2Bv

769 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2Bv

770 ) 

771 ) 

772  

773 @property 

774 def cluster_launch(self) -> bool: 

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

776 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2cw

777  

778 @property 

779 def can_use_64_bit_stream_mem_ops(self) -> bool: 

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

781 return bool( 2mj

782 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2mj

783 ) 

784  

785 @property 

786 def can_use_stream_wait_value_nor(self) -> bool: 

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

788 return bool( 2Dv

789 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2Dv

790 ) 

791  

792 @property 

793 def dma_buf_supported(self) -> bool: 

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

795 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2jw

796  

797 # Start of CUDA 12 device attributes 

798  

799 @property 

800 def ipc_event_supported(self) -> bool: 

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

802 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2vw

803  

804 @property 

805 def mem_sync_domain_count(self) -> int: 

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

807 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2!w

808  

809 @property 

810 def tensor_map_access_supported(self) -> bool: 

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

812 return bool( 26v=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfIowfxf

813 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 26v=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfIowfxf

814 ) 

815  

816 @property 

817 def handle_type_fabric_supported(self) -> bool: 

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

819 return bool( 2Fv

820 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2Fv

821 ) 

822  

823 @property 

824 def unified_function_pointers(self) -> bool: 

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

826 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2@w

827  

828 @property 

829 def mps_enabled(self) -> bool: 

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

831 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2$w

832  

833 @property 

834 def host_numa_id(self) -> int: 

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

836 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2@k'j[k]k(j)jimjmkmlmmmnmompmqmzkrmsmtmj ^k_k`k{k|k*j}ksw*k~fagbg,jcgdgeg,o-jxkyk

837  

838 @property 

839 def d3d12_cig_supported(self) -> bool: 

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

841 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2iw

842  

843 @property 

844 def mem_decompress_algorithm_mask(self) -> int: 

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

846 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 28w

847  

848 @property 

849 def mem_decompress_maximum_length(self) -> int: 

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

851 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 29w

852  

853 @property 

854 def vulkan_cig_supported(self) -> bool: 

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

856 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2[w

857  

858 @property 

859 def gpu_pci_device_id(self) -> int: 

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

861  

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

863 """ 

864 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2qw

865  

866 @property 

867 def gpu_pci_subsystem_id(self) -> int: 

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

869  

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

871 """ 

872 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2rw

873  

874 @property 

875 def host_numa_virtual_memory_management_supported(self) -> bool: 

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

877 return bool( 2xv

878 self._get_cached_attribute( 2xv

879 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2xv

880 ) 

881 ) 

882  

883 @property 

884 def host_numa_memory_pools_supported(self) -> bool: 

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

886 return bool( 2Kv

887 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2Kv

888 ) 

889  

890 # Start of CUDA 13 device attributes 

891  

892 @property 

893 def host_numa_multinode_ipc_supported(self) -> bool: 

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

895 return bool( 2Lv

896 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2Lv

897 ) 

898  

899 @property 

900 def host_memory_pools_supported(self) -> bool: 

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

902 return bool( 2@k'j[k]k(j)jimjmkmlmmmnmompmqmzkrmsmtmj ^k_k`k{k|k*j}kIvZkBl~f)oagClbgDl,jElcgFldgGlegHl,oJlKlLl0l-j3eovxkykpv

903 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2@k'j[k]k(j)jimjmkmlmmmnmompmqmzkrmsmtmj ^k_k`k{k|k*j}kIvZkBl~f)oagClbgDl,jElcgFldgGlegHl,oJlKlLl0l-j3eovxkykpv

904 ) 

905  

906 @property 

907 def host_virtual_memory_management_supported(self) -> bool: 

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

909 return bool( 2yv

910 self._get_cached_attribute( 2yv

911 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2yv

912 ) 

913 ) 

914  

915 @property 

916 def host_alloc_dma_buf_supported(self) -> bool: 

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

918 return bool( 2Hv

919 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2Hv

920 ) 

921  

922 @property 

923 def only_partial_host_native_atomic_supported(self) -> bool: 

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

925 return bool( 2zv

926 self._get_cached_attribute( 2zv

927 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2zv

928 ) 

929 ) 

930  

931  

932class Device: 

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

934  

935 This is a singleton object that helps ensure interoperability 

936 across multiple libraries imported in the process to both see 

937 and use the same GPU device. 

938  

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

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

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

942 this device's context. 

943  

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

945 for a specified device. 

946  

947 Note 

948 ---- 

949 Will not initialize the GPU. 

950  

951 Parameters 

952 ---------- 

953 device_id : int, optional 

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

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

956  

957 """ 

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

959  

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

961 if isinstance(device_id, Device): 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?ogC4xhC5xiC6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o:B]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKA;CEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcCcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

962 return device_id 2gChCiC%v{w'v(v)v5k*v+v1o@xEj[x2o1l3o:Bq r -u.u/u:u;j;u=u?u@u[u]u^u_u4o5o6o7o8o|w}w9o:f!o#o$oQzRzSzTzWe:jAk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ffg=k;C0k1k7drzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzcCIzJzE F

963  

964 Device_ensure_cuda_initialized() 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

965 device_id = Device_resolve_device_id(device_id) 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

966 devices = Device_ensure_tls_devices(cls) 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

967  

968 try: 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

969 return devices[device_id] 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

970 except IndexError: 2+B,B

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

972  

973 def _check_context_initialized(self): 

974 if not self._has_inited: 2UkVk^j0z_j2z`j7kWkgChCiCmCnCoC%v{w'v(v)v5k*v+v]w^w_wjCkClCdBeBfB{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkkBrosotouo8kLzlBmB9k!k#k$k%kvowoxoyozoAoBoCoJeKeLeMeNeOePeQeReSeTeUenBoBgBPnMzNzOzQnPzuk'k(kpB?xXkvkDepy;B=B?B@B[B]B^B_BpC=C?C6k/B9qjB|w}wSx`B#o$oQzRzSzTzqBrBsBtBuBvBEkFkhBwB2kG @jiBGkVzxByBzBABBBCBDBEBFBGBYkqyrysytyuyvywyxyyyzyAyByCyCkVxWxDkiyXxYxFjgv@C[CqC]CrC^C_CsCtC`C{C|CuC}CvCwCxCyCzCACBCCCDC~CECFCGCHCaDICJCbDcDdDeDKCfDLCgDhDMCNCiDjDkDOClDPCQCRCSCTCUCVCWCXCmDYCZC0C1CnD2C3CoDpDqDrD4CsD5CtDuD6C7CvDwDxD8CyD9C!C#C$C%C'C(C)C*CzD+C,C-C.CAD/C:CBDCD:jwkAkBkZk3k0lyfdCGjTnAmBmCmVnHjWnIjXnDmEmFmYnzfAf5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S GmHm3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7n*e.jSjTjUj/jBfCfDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mIfJf4m5mu v V W 6m7mKfLfMfNfw x 8m9m8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)nVj*n!m#m$m+nOfPf; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y %m'm%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@nvjdmiljlklemQfRfSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mXfYf}m~mA B 3 4 anbnZf0f1f2fC D cndn+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~no p 5jaoenfngnbo6jcohninjndo7jeoknlnmnfo8jgonnonpnho9jioqnrnsnjo!jkotnunvnlo#jmownxnynno$jooznAnBnpoHB#AIBJBKBLB$AMBNBOBPBQBRBSBTBUBVBWBXB%AYBZB

975 raise CUDAError( 

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

977 ) 

978  

979  

980 @classmethod 

981 def get_all_devices(cls): 

982 """ 

983 Query the available device instances. 

984  

985 Returns 

986 ------- 

987 tuple of Device 

988 A tuple containing instances of available devices. 

989 """ 

990 from cuda.core import system 2,v0B1B2B~kCvzm4B-v5BrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGz

991 total = system.get_num_devices() 2,v0B1B2B~kCvzm4B-v5BrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGz

992 return tuple(cls(device_id) for device_id in range(total)) 2,v0B1B2B~kCvzm4B-v5BrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGz

993  

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

995 """ 

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

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

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

999  

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

1001  

1002 Returns 

1003 ------- 

1004 cuda.core.system.Device 

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

1006 """ 

1007 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2qv

1008  

1009 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2qv

1010 raise RuntimeError( 

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

1012 ) 

1013  

1014 from cuda.core.system import Device as SystemDevice 2qv

1015 return SystemDevice(uuid=self.uuid) 2qv

1016  

1017 @property 

1018 def device_id(self) -> int: 

1019 """Return device ordinal.""" 

1020 return self._device_id 2bBcBfvgChCiCmCnCoC%v{w'v(v)v5k*v+v]w^w_wjCkClCdBeBfB%o'o+eXe,eYe-eZe.e0e/e1e:e2ehmQuukum1o{B@xEj[xvm2o|B1l3o:BDeq ?jr -u.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_uwm4o}B~B5oaCxm6obC6k7o/B9q8o|w}wSx9ogy:fym!o#o$oQzRzSzTzCvGoEkFkzmTxUzUxFjgv4kWe:j3B)kAkBk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ffg=k;C6d0k1k7dqz?k6B7ByfRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8urzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzcCIzJzGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwjSoToE F 5j6j7j8j9j!j#j$jDyEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1Dgg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfyzgAgBgCgEy

1021  

1022 @property 

1023 def pci_bus_id(self) -> str: 

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

1025 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2~kUzqv

1026 return bus_id[:12].decode() 2~kUzqv

1027  

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

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

1030  

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

1032 device and the specified peer device. 

1033  

1034 Parameters 

1035 ---------- 

1036 peer : Device | int 

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

1038 """ 

1039 peer = Device(peer) 

1040 cdef int d1 = <int> self.device_id 

1041 cdef int d2 = <int> peer.device_id 

1042 if d1 == d2: 

1043 return True 

1044 cdef int value = 0 

1045 with nogil: 

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

1047 return bool(value) 

1048  

1049 @property 

1050 def uuid(self) -> str: 

1051 """Return a UUID for the device. 

1052  

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

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

1055 subscribed MIG compute instance. 

1056  

1057 Note 

1058 ---- 

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

1060 driver is older than CUDA 11.4. 

1061  

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

1063  

1064 """ 

1065 cdef cydriver.CUuuid uuid 

1066 cdef cydriver.CUdevice dev 

1067 cdef bytes uuid_b 

1068 cdef str uuid_hex 

1069  

1070 if self._uuid is None: 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgeg,ofg-jxkyk=jcvdvevHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1071 dev = self._device_id 2Ejq r ;jj :fQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgegfg-jxkyk=jHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1072 with nogil: 2Ejq r ;jj :fQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgegfg-jxkyk=jHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1073 IF CUDA_CORE_BUILD_MAJOR == 12: 

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

1075 ELSE: # 13.0+ 

1076 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2Ejq r ;jj :fQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgegfg-jxkyk=jHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1077 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2Ejq r ;jj :fQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgegfg-jxkyk=jHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1078 uuid_hex = uuid_b.hex() 2Ejq r ;jj :fQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgegfg-jxkyk=jHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1079 # 8-4-4-4-12 

1080 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2Ejq r ;jj :fQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgegfg-jxkyk=jHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1081 return self._uuid 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ ~kFyhyGyHyqvUx+j]f^f_f`f{f|f}f~fagbg,jcgdgeg,ofg-jxkyk=jcvdvevHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1082  

1083 @property 

1084 def name(self) -> str: 

1085 """Return the device name.""" 

1086 # Use 256 characters to be consistent with CUDA Runtime 

1087 cdef int LENGTH = 256 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1088 cdef bytes name = bytes(LENGTH) 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1089 cdef char* name_ptr = name 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1090 cdef cydriver.CUdevice this_dev = self._device_id 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1091 with nogil: 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1092 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1093 name = name.split(b"\0")[0] 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1094 return name.decode() 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wTxRk

1095  

1096 @property 

1097 def properties(self) -> DeviceProperties: 

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

1099 if self._properties is None: 2a UkVk^j_j`j7kWk4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/x:x;x=x{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRn?xXkvk1o@kEj'j2o[k3o]kDeq py(j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ SnGo(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDk:z?ziy~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlqzRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jcvdvthevuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

1100 self._properties = DeviceProperties._init(self._device_id) 2a UkVk^j_j`j7kWkqo{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmuk'k(kRnXkvkq r j :fQ mjrhnjojxjyjzjpjqjAjBjrjCjshDjG YkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e4kWe:jplqlrl)k*kslwkAkBkZk+k,k]f-k^f_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylzlmvAlnvBl~fagClbgDlElcgFldgGlegHlfgIlJl=kKlEoLl3eovxkykpv6d0k1k7dVeMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWl5eXlYl6e7e8e9e!e#e$eZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCewfxf

1101  

1102 return self._properties 2a UkVk^j_j`j7kWk4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/x:x;x=x{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'o.v/v:v;v=vDgEgFgGgHgIg?vrosotouo8kUoVo9k!k#k$k%kvowoxoyozoAoBoCoWo@v[v]v^v_v`vCnDn+eXe0dJgJeKeKgudLgMgNgOgPg,eYe1dQgLeMeRgvdSgTgDoUgVgWgXgYgZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9gwd!g#g$g%g'g.e0e3d(gPeQe)gxd*g+g,g-g.g/e1e4d/gReSe:gyd;g=g?g@g[g:e2e5d]gTeUe^gzd_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhohphqhXo{v|v%jYogmZoEnFnGnHnInJnKnLnMnNnOnPnQnhmQuuk'k(kRn?xXkvk1o@kEj'j2o[k3o]kDeq py(j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ SnGo(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDjG YkCkDk:z?ziy~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;e4kWe:jplqlrl)k*ksl(owkAkBkZk+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlEoLl0l-j3eovxkykpv6d0k1k7dVeMlqzRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc=jcvdvthevuh8dvhwhFc9dxhyhGcHczh!dAhBhIc#dChDhJcAdzfAfEhFhGhHhBdIhJhKhLh5 f 6 7 b g 8 9 c R S $d%d'd(d)dMh*dNhOh+dPhQh3f! 4f5fH # 6f7fI Eem FeGek n HeIel RhCdBfCfShThUhVhDdWhXhYhZhDfT EfFfs U GfHft EdIfJf0h1h2h3h4h5h6h7h,d8h9h-d!h#h$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d%h'hUc@d(h)hVcJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h^h]d_h`h8f/ 9f!fJ : #f$fK {hLd|h}h7cMd~hai8cNdOfPfbicidieiOdfigihiii; h = ? d i @ [ e X Y ^d_d`d{d|dji}dkili~dmini%f] 'f(fL ^ )f*fM ;f9c=f?fZ !c@f[f0 oiPdQfRfpiqirisiQdtiuiviwiSf1 TfUfy 2 VfWfz RdXfYfxiyiziAiBiCiDiEiaeFiGibeHiIi_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJiheKiLi.cieMiNi/cWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0i1ike2iFo+feb,f-fN fb.f/fO E F o p |c}c3ile4i5i~cme6i7iadbdcddd8iYd9i!iedZd#i$ifd%ine'i(igdoe)i*ihd+ipe,i-iidqe.i/ijd:ire;i=ikdse?i@ild[ite]i^imdue_i`ind{ive|i}iodwe~iajpdqdbjxecjdjrdyeejfjsdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP =e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf

1103  

1104 @property 

1105 def compute_capability(self) -> ComputeCapability: 

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

1107 cdef DeviceProperties prop = self.properties 2a UkVk^j_j`j7kWk%v{w'v(v)v5k*v+v]w^w_w{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk8kUoVo9k!k#k$k%kWoCnDn0dud1dvd2dwd3dxd4dyd5dzdXo%jYoZoEnFnGnHnInJnKnLnMnNnOnhmQuuk'k(kRn?xXkvkDepySnGoG YkCkDk:z?ziy~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlqzRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?bTA@bUA[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcVAncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP zeAeBeCe

1108 if "compute_capability" in prop._cache: 2a UkVk^j_j`j7kWk%v{w'v(v)v5k*v+v]w^w_w{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk8kUoVo9k!k#k$k%kWoCnDn0dud1dvd2dwd3dxd4dyd5dzdXo%jYoZoEnFnGnHnInJnKnLnMnNnOnhmQuuk'k(kRn?xXkvkDepySnGoG YkCkDk:z?ziy~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlqzRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?bTA@bUA[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcVAncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP zeAeBeCe

1109 return prop._cache["compute_capability"] 2a %v{w'v(v)v5k*v+v]w^w_w?xDepySnYkDk:z?ziy~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlqzRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?bTA@bUA[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcVAncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcb c H I k l s t $ KcLc% u v ' McNcOcPcQc( ) RcScTcFdUcVc* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6cJ K Ld7cMd8cd e L M Z 0 y z _ #c$c` A B { %c'c(c)c*c| } +c,c-cSd.c/c~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cN O |c}c~cadbdcdddYdedZdfdgdhdidjdkdldmdndodpdqdrdsdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP

1110 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a UkVk^j_j`j7kWk5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk8kUoVo9k!k#k$k%kWoCnDn0dud1dvd2dwd3dxd4dyd5dzdXo%jYoZoEnFnGnHnInJnKnLnMnNnOnhmQuuk'k(kRnXkvkDeSnGoG YkCkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP zeAeBeCe

1111 prop._cache["compute_capability"] = cc 2a UkVk^j_j`j7kWk5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk8kUoVo9k!k#k$k%kWoCnDn0dud1dvd2dwd3dxd4dyd5dzdXo%jYoZoEnFnGnHnInJnKnLnMnNnOnhmQuuk'k(kRnXkvkDeSnGoG YkCkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP zeAeBeCe

1112 return cc 2a UkVk^j_j`j7kWk5k{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk8kUoVo9k!k#k$k%kWoCnDn0dud1dvd2dwd3dxd4dyd5dzdXo%jYoZoEnFnGnHnInJnKnLnMnNnOnhmQuuk'k(kRnXkvkDeSnGoG YkCkgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWl5e+oXlYl6e7e8e9e!e#e$eZl%e'e(e)eP zeAeBeCe

1113  

1114 @property 

1115 def arch(self) -> str: 

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

1117 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a %v{w'v(v)v5k*v+v]w^w_wSnYkiyWzlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbMlqzRb?kSbTbUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcb c H I k l s t $ KcLc% u v ' McNcOcPcQc( ) RcScTcUcVc* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6cJ K 7c8cd e L M Z 0 y z _ #c$c` A B { %c'c(c)c*c| } +c,c-c.c/c~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cN O |c}c~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP

1118  

1119 @property 

1120 def context(self) -> Context: 

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

1122  

1123 Note 

1124 ---- 

1125 Device must be initialized. 

1126  

1127 """ 

1128 self._check_context_initialized() 2TnXn3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7n.jclcm*n%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@ndmllfmaocoeogoiokomooo

1129 return self._context 2TnXn3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7n.jclcm*n%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@ndmllfmaocoeogoiokomooo

1130  

1131 @property 

1132 def memory_resource(self) -> MemoryResource: 

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

1134 cdef int attr, device_id 

1135 if self._memory_resource is None: 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCgEy

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

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

1138 device_id = self._device_id 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgEy

1139 with nogil: 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgEy

1140 HANDLE_RETURN( 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgEy

1141 cydriver.cuDeviceGetAttribute( 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgEy

1142 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1143 ) 

1144 ) 

1145 if attr == 1: 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgEy

1146 from cuda.core._memory import DeviceMemoryResource 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgEy

1147 self._memory_resource = DeviceMemoryResource(self._device_id) 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgEy

1148 else: 

1149 from cuda.core._memory import _SynchronousMemoryResource 

1150 self._memory_resource = _SynchronousMemoryResource(self._device_id) 

1151  

1152 return self._memory_resource 2EkFkFjgvyfGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$jgg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCgEy

1153  

1154 @memory_resource.setter 

1155 def memory_resource(self, mr): 

1156 from cuda.core._memory import MemoryResource 

1157 assert_type(mr, MemoryResource) 

1158 self._memory_resource = mr 

1159  

1160 @property 

1161 def default_stream(self) -> Stream: 

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

1163  

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

1165 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1166  

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

1168 the legacy stream. 

1169  

1170 """ 

1171 return default_stream() 2~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvx8B

1172  

1173 def __int__(self): 

1174 """Return device_id.""" 

1175 return self._device_id 2jCkClCEkFk

1176  

1177 def __repr__(self): 

1178 return f"<Device {self._device_id} ({self.name})>" 2%jgmum{B@x[xvm|B1l:BDepy;B=B?B@B[B]B^B_B?j9Bwm}B~BaCxmbC6k/B9qjB|w}wSx`BgyeCymfC`wRk

1179  

1180 def __hash__(self) -> int: 

1181 return hash(self.uuid) 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ FyhyGyHy+j]f^f_f`f{f|f}f~fagbg,jcgdgeg,ofg-jxkyk=jcvdvevHkEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkE F o p SkTk[j]j

1182  

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

1184 if not isinstance(other, Device): 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ )Bhy*B-B+j]f^f_f`f{f|f}f~fagbg,jcgdgeg,ofg-jxkyk=jcvdvevUn;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRoE F o p [j]j%A

1185 return NotImplemented 2-BUn;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRo%A

1186 return self._device_id == other._device_id 21o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,ur )j4oj 5o^k6o_k7o`k8o{k`u{u9o|k:f*j!o}k|u}u~uavbvQ )Bhy*B+j]f^f_f`f{f|f}f~fagbg,jcgdgeg,ofg-jxkyk=jcvdvevUnE F o p [j]j

1187  

1188 def __reduce__(self): 

1189 return Device, (self.device_id,) 2um{B@x[xvm|B1l:BDe?j!B#B$B%B'B(Bwm}B~BaCxmbC6k/B9q|w}wSxgyym#o$oQzRzSzTzSoTo

1190  

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

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

1193  

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

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

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

1197  

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

1199  

1200 Parameters 

1201 ---------- 

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

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

1204  

1205 Returns 

1206 ------- 

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

1208 Popped context. 

1209  

1210 Examples 

1211 -------- 

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

1213 calling this method, e.g. 

1214  

1215 >>> from cuda.core import Device 

1216 >>> dev0 = Device(0) 

1217 >>> dev0.set_current() 

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

1219  

1220 """ 

1221 cdef ContextHandle h_context 

1222 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1223  

1224 if ctx is not None: 2-o.oZz1z/o:o;o=o?o4x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q4z1q2q3q4q5q6q5z7q8q1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,u?jr 9B)j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k9q8ojB{k`u{u9o|k:f*j!o}k|u}u~uavbvQ !q#q$q%q6z'q(qEkFk7z)q8z9z!z#z$zzm%z'z`w]x)z*z2kG @j*qGk+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk;z=z@z[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrnAuloAervlpAqAwlrAsAxltAuAylvAwAzlxAyAAlzAfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eNAOAPAQA6d0k1k7dVerrRARbsrSbTbUbtrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcHz=jcCcvIzdvdCthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 'tKz(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|tDy}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;Avuwu=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1225 # TODO: revisit once Context is cythonized 

1226 assert_type(ctx, Context) 

1227 if ctx._device_id != self._device_id: 

1228 raise RuntimeError( 

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

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

1231 ) 

1232 # prev_ctx is the previous context 

1233 curr_ctx = as_cu(ctx._h_context) 

1234 prev_ctx = NULL 

1235 with nogil: 

1236 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 

1237 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 

1238 self._has_inited = True 

1239 self._context = ctx # Store owning context reference 

1240 if prev_ctx != NULL: 

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

1242 else: 

1243 # use primary ctx 

1244 h_context = get_primary_context(self._device_id) 2-o.oZz1z/o:o;o=o?o4x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q4z1q2q3q4q5q6q5z7q8q1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,u?jr 9B)j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k9q8ojB{k`u{u9o|k:f*j!o}k|u}u~uavbvQ !q#q$q%q6z'q(qEkFk7z)q8z9z!z#z$zzm%z'z`w]x)z*z2kG @j*qGk+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk;z=z@z[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrnAuloAervlpAqAwlrAsAxltAuAylvAwAzlxAyAAlzAfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eNAOAPAQA6d0k1k7dVerrRARbsrSbTbUbtrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcHz=jcCcvIzdvdCthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 'tKz(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|tDy}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;Avuwu=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1245 if h_context.get() == NULL: 2-o.oZz1z/o:o;o=o?o4x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q4z1q2q3q4q5q6q5z7q8q1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,u?jr 9B)j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k9q8ojB{k`u{u9o|k:f*j!o}k|u}u~uavbvQ !q#q$q%q6z'q(qEkFk7z)q8z9z!z#z$zzm%z'z`w]x)z*z2kG @j*qGk+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk;z=z@z[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrnAuloAervlpAqAwlrAsAxltAuAylvAwAzlxAyAAlzAfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eNAOAPAQA6d0k1k7dVerrRARbsrSbTbUbtrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcHz=jcCcvIzdvdCthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 'tKz(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|tDy}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;Avuwu=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

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

1247 with nogil: 2-o.oZz1z/o:o;o=o?o4x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q4z1q2q3q4q5q6q5z7q8q1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,u?jr 9B)j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k9q8ojB{k`u{u9o|k:f*j!o}k|u}u~uavbvQ !q#q$q%q6z'q(qEkFk7z)q8z9z!z#z$zzm%z'z`w]x)z*z2kG @j*qGk+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk;z=z@z[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrnAuloAervlpAqAwlrAsAxltAuAylvAwAzlxAyAAlzAfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eNAOAPAQA6d0k1k7dVerrRARbsrSbTbUbtrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcHz=jcCcvIzdvdCthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 'tKz(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|tDy}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;Avuwu=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1248 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2-o.oZz1z/o:o;o=o?o4x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q4z1q2q3q4q5q6q5z7q8q1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,u?jr 9B)j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k9q8ojB{k`u{u9o|k:f*j!o}k|u}u~uavbvQ !q#q$q%q6z'q(qEkFk7z)q8z9z!z#z$zzm%z'z`w]x)z*z2kG @j*qGk+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk;z=z@z[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrnAuloAervlpAqAwlrAsAxltAuAylvAwAzlxAyAAlzAfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eNAOAPAQA6d0k1k7dVerrRARbsrSbTbUbtrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcHz=jcCcvIzdvdCthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 'tKz(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|tDy}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;Avuwu=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1249 self._has_inited = True 2-o.oZz1z/o:o;o=o?o4x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q4z1q2q3q4q5q6q5z7q8q1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,u?jr 9B)j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k9q8ojB{k`u{u9o|k:f*j!o}k|u}u~uavbvQ !q#q$q%q6z'q(qEkFk7z)q8z9z!z#z$zzm%z'z`w]x)z*z2kG @j*qGk+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk;z=z@z[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrnAuloAervlpAqAwlrAsAxltAuAylvAwAzlxAyAAlzAfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eNAOAPAQA6d0k1k7dVerrRARbsrSbTbUbtrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcHz=jcCcvIzdvdCthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 'tKz(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|tDy}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;Avuwu=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1250 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2-o.oZz1z/o:o;o=o?o4x5x6x7x8xqo9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q4z1q2q3q4q5q6q5z7q8q1o@kEj'j2o[k3o]kq (j9u!u#u$u%u'u(u)u*u+u,u?jr 9B)j-uim.u/u:u;j;u=u?u@u[u]u^u_ujmkmlmmmnmompmqmzkrmsmtm4oj 5o^k6o_k7o`k9q8ojB{k`u{u9o|k:f*j!o}k|u}u~uavbvQ !q#q$q%q6z'q(qEkFk7z)q8z9z!z#z$zzm%z'z`w]x)z*z2kG @j*qGk+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk;z=z@z[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrnAuloAervlpAqAwlrAsAxltAuAylvAwAzlxAyAAlzAfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eNAOAPAQA6d0k1k7dVerrRARbsrSbTbUbtrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcHz=jcCcvIzdvdCthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 'tKz(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|tDy}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;Avuwu=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1251  

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

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

1254  

1255 Note 

1256 ---- 

1257 The newly context will not be set as current. 

1258  

1259 Parameters 

1260 ---------- 

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

1262 Customizable dataclass for context creation options. 

1263  

1264 Returns 

1265 ------- 

1266 :obj:`~_context.Context` 

1267 Newly created context object. 

1268  

1269 """ 

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

1271  

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

1273 """Create a Stream object. 

1274  

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

1276  

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

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

1279  

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

1281 such that the lifetime is managed. 

1282  

1283 Note 

1284 ---- 

1285 Device must be initialized. 

1286  

1287 Parameters 

1288 ---------- 

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

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

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

1292 Customizable dataclass for stream creation options. 

1293  

1294 Returns 

1295 ------- 

1296 :obj:`~_stream.Stream` 

1297 Newly created stream object. 

1298  

1299 """ 

1300 self._check_context_initialized() 2UkVk^j0z_j2z`j7kWkgChCiCmCnCoC%v{w'v(v)v5k*v+v]w^w_wjCkClCdBeBfB{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkkBrosotouo8kLzlBmB9k!k#k$k%kvowoxoyozoAoBoConBoBNzOzuk'k(kpB?xXkvkDepy;B=B?B@B[B]B^B_BpC=C?C6k/B9qjB|w}wSx`B#o$oQzRzSzTzqBrBsBtBuBvBwB2kG @jxByBzBABBBCBDBEBFBGBYkqyrysytyuyvywyxyyyzyAyByCyCkVxWxDkiyXxYx@C[CqC]CrC^C_CsCtC`C{C|CuC}CvCwCxCyCzCACBCCCDC~CECFCGCHCaDICJCbDcDdDeDKCfDLCgDhDMCNCiDjDkDOClDPCQCRCSCTCUCVCWCXCmDYCZC0C1CnD2C3CoDpDqDrD4CsD5CtDuD6C7CvDwDxD8CyD9C!C#C$C%C'C(C)C*CzD+C,C-C.CAD/C:CBDCD:jwk3k0lyfdCVnWnYn/j8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n+nem+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~no p bodofohojolonopoHB#AIBJBKBLB$AMBNBOBPBQBRBSBTBUBVBWBXB%AYBZB

1301 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2UkVk^j0z_j2z`j7kWkgChCiCmCnCoC%v{w'v(v)v5k*v+v]w^w_wjCkClCdBeBfB{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkkBrosotouo8kLzlBmB9k!k#k$k%kvowoxoyozoAoBoConBoBNzOzuk'k(kpB?xXkvkDepy;B=B?B@B[B]B^B_BpC=C?C6k/B9qjB|w}wSx`B#o$oQzRzSzTzqBrBsBtBuBvBwB2kG @jxByBzBABBBCBDBEBFBGBYkqyrysytyuyvywyxyyyzyAyByCyCkVxWxDkiyXxYx@C[CqC]CrC^C_CsCtC`C{C|CuC}CvCwCxCyCzCACBCCCDC~CECFCGCHCaDICJCbDcDdDeDKCfDLCgDhDMCNCiDjDkDOClDPCQCRCSCTCUCVCWCXCmDYCZC0C1CnD2C3CoDpDqDrD4CsD5CtDuD6C7CvDwDxD8CyD9C!C#C$C%C'C(C)C*CzD+C,C-C.CAD/C:CBDCD:jwk3k0lyfdCVnWnYn/j8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n+nem+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~no p bodofohojolonopoHB#AIBJBKBLB$AMBNBOBPBQBRBSBTBUBVBWBXB%AYBZB

1302  

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

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

1305  

1306 Note 

1307 ---- 

1308 Device must be initialized. 

1309  

1310 Parameters 

1311 ---------- 

1312 options : :obj:`EventOptions`, optional 

1313 Customizable dataclass for event creation options. 

1314  

1315 Returns 

1316 ------- 

1317 :obj:`~_event.Event` 

1318 Newly created event object. 

1319  

1320 """ 

1321 self._check_context_initialized() 2LzJeKeLeMeNeOePeQeReSeTeUegBPnMzNzOzQnPzukpChB@jiBGkVzAmBmCmDmEmFmzfAfgjhjR S GmHmalblSjTjUjBfCfDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mIfJf4m5mu v V W 6m7mKfLfMfNfw x 8m9mdlelfl!m#m$mOfPfjjkjX Y %m'mglhliljlklQfRfSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mXfYf}m~mA B 3 4 anbnZf0f1f2fC D cndnmlnlolenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBn

1322 cdef Context ctx = self._context 2LzJeKeLeMeNeOePeQeReSeTeUegBPnMzNzOzQnPzukpChB@jiBGkVzAmBmCmDmEmFmzfAfgjhjR S GmHmalblSjTjUjBfCfDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mIfJf4m5mu v V W 6m7mKfLfMfNfw x 8m9mdlelfl!m#m$mOfPfjjkjX Y %m'mglhliljlklQfRfSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mXfYf}m~mA B 3 4 anbnZf0f1f2fC D cndnmlnlolenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBn

1323 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2LzJeKeLeMeNeOePeQeReSeTeUegBPnMzNzOzQnPzukpChB@jiBGkVzAmBmCmDmEmFmzfAfgjhjR S GmHmalblSjTjUjBfCfDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mIfJf4m5mu v V W 6m7mKfLfMfNfw x 8m9mdlelfl!m#m$mOfPfjjkjX Y %m'mglhliljlklQfRfSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mXfYf}m~mA B 3 4 anbnZf0f1f2fC D cndnmlnlolenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBn

1324  

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

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

1327  

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

1329 using the memory resource currently associated with this Device. 

1330  

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

1332  

1333 Note 

1334 ---- 

1335 Device must be initialized. 

1336  

1337 Parameters 

1338 ---------- 

1339 size : int 

1340 Number of bytes to allocate. 

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

1342 The stream establishing the stream ordering semantic. 

1343 Default value of `None` uses default stream. 

1344  

1345 Returns 

1346 ------- 

1347 :obj:`~_memory.Buffer` 

1348 Newly created buffer object. 

1349  

1350 """ 

1351 self._check_context_initialized() 2EkFkFjgvGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$j

1352 return self.memory_resource.allocate(size, stream) 2EkFkFjgvGjHjIj5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjsj*eijtjVj; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jujvjljwj5j6j7j8j9j!j#j$j

1353  

1354 def sync(self): 

1355 """Synchronize the device. 

1356  

1357 Note 

1358 ---- 

1359 Device must be initialized. 

1360  

1361 """ 

1362 self._check_context_initialized() 2#o$oQzRzSzTzEkFkVxWxXxYxqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C:jwkAkBkZk0l

1363 handle_return(runtime.cudaDeviceSynchronize()) 2#o$oQzRzSzTzEkFkVxWxXxYxqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C:jwkAkBkZk0l

1364  

1365 def create_graph_builder(self) -> GraphBuilder: 

1366 """Create a new :obj:`~_graph.GraphBuilder` object. 

1367  

1368 Returns 

1369 ------- 

1370 :obj:`~_graph.GraphBuilder` 

1371 Newly created graph builder object. 

1372  

1373 """ 

1374 self._check_context_initialized() 2UkVk^j0z_j2z`jWkgChCiCmCnCoC%v'v(v)v*v+v]w^w_wjCkClCdBeBfB{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk?xXkvk

1375 return GraphBuilder._init(stream=self.create_stream(), is_stream_owner=True) 2UkVk^j0z_j2z`jWkgChCiCmCnCoC%v'v(v)v*v+v]w^w_wjCkClCdBeBfB{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk?xXkvk

1376  

1377  

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

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

1380 global _is_cuInit 

1381 if _is_cuInit is False: 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1382 with _lock, nogil: 

1383 HANDLE_RETURN(cydriver.cuInit(0)) 

1384 _is_cuInit = True 

1385 try: 

1386 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1387 except ImportError: 

1388 pass 

1389 else: 

1390 warn_if_cuda_major_version_mismatch() 

1391 return 0 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1392  

1393  

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

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

1396 cdef cydriver.CUdevice dev 

1397 cdef cydriver.CUcontext ctx 

1398 cdef cydriver.CUresult err 

1399 if device_id is None: 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1400 with nogil: 2a bBcBfvUkVk^j0z_j2z`j7kWk%v{w'v(v)v5k*v+v]w^w_w{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'okBrosotouo8kLzlBmB9k!k#k$k%kvowoxoyozoAoBoCoCnDn+eXe0dJeKeud,eYe1dLeMevd-eZe2dNeOewd.e0e3dPeQexd/e1e4dReSeyd:e2e5dTeUezd%jEnFnGnHnInJnKnLnMnNnnBoBOngBPnMzNzOzQnPzhmQuuk'k(kRnpB?xXkvk@k'j[k]k(j)jimjmkmlmmmnmompmqmzkrmsmtmj ^k_k`k{k|k*j}kqBrBsBtBuBvBSnGoEkFkhBwB(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj]xTxUzqvUx2kG @jiBGkVzxByBzBABBBCBDBEBFBGBYkrvCkVxWxDk:z?ziy~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j3Bplqlrl)k*ksl(owkAkBkZk.B+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlbmpz3kLl0l-j3eovxkykpv6d0k1k7dVeMlqzRb?kSb6BTb7BUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP Kz8BHB#AIBJBKBLB$AMBNBOBPBQBRBSBTBUBVBWBDyXB%AYBZB=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxfgg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg

1401 err = cydriver.cuCtxGetDevice(&dev) 2a bBcBfvUkVk^j0z_j2z`j7kWk%v{w'v(v)v5k*v+v]w^w_w{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'okBrosotouo8kLzlBmB9k!k#k$k%kvowoxoyozoAoBoCoCnDn+eXe0dJeKeud,eYe1dLeMevd-eZe2dNeOewd.e0e3dPeQexd/e1e4dReSeyd:e2e5dTeUezd%jEnFnGnHnInJnKnLnMnNnnBoBOngBPnMzNzOzQnPzhmQuuk'k(kRnpB?xXkvk@k'j[k]k(j)jimjmkmlmmmnmompmqmzkrmsmtmj ^k_k`k{k|k*j}kqBrBsBtBuBvBSnGoEkFkhBwB(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj]xTxUzqvUx2kG @jiBGkVzxByBzBABBBCBDBEBFBGBYkrvCkVxWxDk:z?ziy~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j3Bplqlrl)k*ksl(owkAkBkZk.B+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlbmpz3kLl0l-j3eovxkykpv6d0k1k7dVeMlqzRb?kSb6BTb7BUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP Kz8BHB#AIBJBKBLB$AMBNBOBPBQBRBSBTBUBVBWBDyXB%AYBZB=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxfgg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg

1402 if err == cydriver.CUresult.CUDA_SUCCESS: 2a bBcBfvUkVk^j0z_j2z`j7kWk%v{w'v(v)v5k*v+v]w^w_w{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'okBrosotouo8kLzlBmB9k!k#k$k%kvowoxoyozoAoBoCoCnDn+eXe0dJeKeud,eYe1dLeMevd-eZe2dNeOewd.e0e3dPeQexd/e1e4dReSeyd:e2e5dTeUezd%jEnFnGnHnInJnKnLnMnNnnBoBOngBPnMzNzOzQnPzhmQuuk'k(kRnpB?xXkvk@k'j[k]k(j)jimjmkmlmmmnmompmqmzkrmsmtmj ^k_k`k{k|k*j}kqBrBsBtBuBvBSnGoEkFkhBwB(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj]xTxUzqvUx2kG @jiBGkVzxByBzBABBBCBDBEBFBGBYkrvCkVxWxDk:z?ziy~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j3Bplqlrl)k*ksl(owkAkBkZk.B+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlbmpz3kLl0l-j3eovxkykpv6d0k1k7dVeMlqzRb?kSb6BTb7BUbyfVb4eNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWlYz5e+oXlYl6e7e8e9e!e#e$elyZl%e'e(e)eP Kz8BHB#AIBJBKBLB$AMBNBOBPBQBRBSBTBUBVBWBDyXB%AYBZB=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxfgg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg

1403 return int(dev) 2UkVk^j0z_j2z`j7kWk%v{w'v(v)v5k*v+v]w^w_w{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktk%o'okBrosotouo8kLzlBmB9k!k#k$k%kvowoxoyozoAoBoCoCnDn+eXe0dJeKeud,eYe1dLeMevd-eZe2dNeOewd.e0e3dPeQexd/e1e4dReSeyd:e2e5dTeUezd%jEnFnGnHnInJnKnLnMnNnnBoBOngBPnMzNzOzQnPzhmQuuk'k(kRnpB?xXkvk@k'j[k]k(j)jimjmkmlmmmnmompmqmzkrmsmtmj ^k_k`k{k|k*j}kqBrBsBtBuBvBhBwBiBVzxByBzBABBBCBDBEBFBGBYkCkVxWxDk:z?ziy~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y^y_y`y{y|y}y~yazbzczdzezfzgzhzizjzkzlzmznzoz4k:j3Bplqlrl)k*ksl(owkAkBkZk.B+k+j,k]f-k^f0o_f.k`f/k{f:k|f;k}ftlhvulivvljvwlkvxllvylwxzlmvAlnvBl~f)oagClbgDl,jElcgFldgGlegHl,ofgIlJl=k*oKlpzLl0l-jovxkykpv0k1kMlqzRb?kSb6BTb7BUbyfVbNlOlPlQlRlSlTlUlXzVlWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEc8dFc9dGcHc!dIc#dJcAdBdf b g c R S $d%d'd(d)d*d+d! H # I m k n l CdDdT s U t Ed,d-d$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d?dUc@dVcJdKd* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[d]d/ J : K Ld7cMd8cNdOdh d i e X Y ^d_d`d{d|d}d~d] L ^ M 9cZ !c0 PdQd1 y 2 z Rdaebe_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegehe.cie/cWdXd~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cjekeebN fbO |c}cle~cmeadbdcdddYdedZdfdnegdoehdpeidqejdrekdseldtemduendveodwepdqdxerdyesdtdWlYz+oXlYlZlKz8BHB#AIBJBKBLB$AMBNBOBPBQBRBSBTBUBVBWBDyXB%AYBZB=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCeIowfxf^x_x`x{x|x}x~xaybycydyeyfymynyoy

1404 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1405 with nogil: 2a bBcBfvSnGoEkFk(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj]xTxUzqvUx2kG @jGkrvgbhbibjbkb2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWebm3k3e6d7dVe4e5e6e7e8e9e!e#e$ely%e'e(e)eP gghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCg

1406 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a bBcBfvSnGoEkFk(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj]xTxUzqvUx2kG @jGkrvgbhbibjbkb2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWebm3k3e6d7dVe4e5e6e7e8e9e!e#e$ely%e'e(e)eP gghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCg

1407 assert <void*>(ctx) == NULL 2a bBcBfvSnGoEkFk(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj]xTxUzqvUx2kG @jGkrvgbhbibjbkb2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWebm3k3e6d7dVe4e5e6e7e8e9e!e#e$ely%e'e(e)eP gghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCg

1408 return 0 # cudart behavior 2a bBcBfvSnGoEkFk(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj]xTxUzqvUx2kG @jGkrvgbhbibjbkb2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWebm3k3e6d7dVe4e5e6e7e8e9e!e#e$ely%e'e(e)eP gghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCg

1409 else: 

1410 HANDLE_RETURN(err) 

1411 elif device_id < 0: 2a -o.o^jZz1z_j/o:o`j;o=o?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApBpCproDpsoEptoFpuoGpHpIpJpKpUoLpVoMpNpOpPpQpRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwqxqYoyqzqgmAqZoBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqPnUqMzVqWqXqQnYqPzZq0q4z1q2q3q4q5q6q5z7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCv!q#q$q%q6z'q(qEkFk7z)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z`wHy)z-B*z*qVz+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyDk;z=z@z[zlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eFjgv=q^z_z?q@q`z4k[q{z]q^q_q|z`q}z~zaA{qbAcAdAeAfAgA|qhAiA}qjAkAlA~qarmAbrcrdrnAoAerpAqArAsAtAuAvAwAxAyAzAfrAABACAgrDAhrirEAjrkrlrmrnrFAGAHAorprIAqrJAKAEoLAMANAOAPAQA6d4B-v5BrrRARbsrSbTbUbyftrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 't(t)t*t#A+t,t-t.t/t$A:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:AgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

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

1413 return device_id 2a -o.o^jZz1z_j/o:o`j;o=o?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApBpCproDpsoEptoFpuoGpHpIpJpKpUoLpVoMpNpOpPpQpRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwqxqYoyqzqgmAqZoBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqPnUqMzVqWqXqQnYqPzZq0q4z1q2q3q4q5q6q5z7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCv!q#q$q%q6z'q(qEkFk7z)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z`wHy)z-B*z*qVz+q+z,q-q,z-z.z.q/q:q/z;qqyrysytyuyvywyxyyyzyAyByCyDk;z=z@z[zlbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eFjgv=q^z_z?q@q`z4k[q{z]q^q_q|z`q}z~zaA{qbAcAdAeAfAgA|qhAiA}qjAkAlA~qarmAbrcrdrnAoAerpAqArAsAtAuAvAwAxAyAzAfrAABACAgrDAhrirEAjrkrlrmrnrFAGAHAorprIAqrJAKAEoLAMANAOAPAQA6d4B-v5BrrRARbsrSbTbUbyftrVburvrwrxryrzrArBrSACrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotptYAZAqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStTtUtVtWtXtYtZt0t1t9A!A2t3t4t5t6t7t8t9t!t#t$t%tP 't(t)t*t#A+t,t-t.t/t$A:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:AgghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1414  

1415  

1416cdef inline list Device_ensure_tls_devices(cls): 

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

1418 cdef int total 

1419 try: 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1420 return _tls.devices 2a bBcBfvUk-oVk.o^jZz0z1z_j/o2z:o`j;o7k=oWk?o4x5x6x7x8xqo%v9x{w!x'v#x(v$x)v%x5k'x*v(x+v)x]w*x^w+x_w,x-x.x/xdB:xeB;xfB=x{j@o|j[o}j]o~j^oak_obk`ock{odk|oek}ofk~ogkaphkbpikcpjkdpkkeplkfpmkgpnkhpokippkjpqkkprklpskmptknp%oop'opp.vqprp,v/vsptp:vup;vvp=vwpDgEgFgxpGgHgIg?vypzpApkBBpCproDpsoEptoFpuoGp8kHpLzIplBJpmBKpUoLpVoMp9kNp!kOp#kPp$kQp%kRpvoSpwoTpxoUpyoVpzoWpAoXpBoYpCoZpWo0p1p2p3p@v4p[v5p]v6p^v7p_v8p`v9pCn!pDn#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgDoUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnq3zoqpqqqrqsqXotquq{vvq|vwq%jxqYoyqzqgmAqZoBqEnCqFnDqGnEqHnFqInGqJnHqIqJqKqLqKnMqLnNqMnOqNnPqnBQqoBRqOnSqgBTqPnUqMzVqNzWqOzXqQnYqPzZqhm0qQu4zuk1q'k2q(k3qRn4qpB5q6q?x5zXk7qvk8qum1o@k@xEj[x'jvm2o[k1l3o]kDeq (j9u!u#u$u%u'u(u)u*u+u,u?jr )j-uim.u!B/u:u#B;j;u$B=u?u%B@u[u'B]u^u(B_ujmkmlmmmnmompmqmzkrmsmtmwm4oj 5o^kxm6o_k6k7o`k0B1B2B9q8o{k|w`u}w{uSx9o|kgy:f*jym!o}k#o|u$o}uQz~uRzavSzbvTzQ ~kCvqB!qrB#qsB$qtB%quB6zvB'q(qSnGoEkFkhB7zwB)qFy8z)B9zhy!z*B#zGy$zzm+B%z,B'z(z}v~vawbwmjrhDvZxcwdwew0xnjfwgwhwiwsvtvjwkwojlwmwEvnwuvowpwqwrwFvvvGvwvHvIvJvswKvLvxvtwyvuwvw1xwwxwywzwAwBwCwDwEwFwGwHwIwJwMvKwNvOvLwMwPvxjNwyjQvRvOwPwQwRwzjSvTvSwUvTwUwVvVwWwXwYwWvXvZw0w1w2wYvpj3w4wqj5wZv6w0v1v2v7w8w9w!w2x#wAj$w%w'w(w)w*w+wzv,wAv-w.wBjrj3v3x4v5vCj/w6v:w;wBv=w?w@wsh[wDj`w]xHy)z-B*zTxUzqvUx2kG @jiB*qGkVz+qxB+zyB,qzB-qAB,zBB-zCB.zDB.qEB/qFB:qGB/zYk;qrvqyrysytyuyvywyxyyyzyAyByCyCkVxWxDk:z;z=z?z@ziy[z~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvxWzlbmb]znbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbHo;eIyXxYxJyKy2l3lLyFjgv=q^z_z?q@q`zMyNyOy4lPyQy5l6lRySy7l8lTyUyVy9lWy!lXyYyZy0y#l1y$l%l2y3y4y5y6y7y8y9y'l(l)l!y#y$y*l%y+l,l-l.l/l'y:l(y)y;l*y+y,y=l-y.y/y:y;y=y?y@y?l[y]y^y_y`y{y|y@l[l}y~yazbz]lczdzezfz^l_lgzhz`l{l|liz}ljzkzlz~lmznzozam4kWe:j[q3B{zpl]qql^qrl_q)k|z*k`qsl}z(o~zwkaAAk{qBkbAZkcA.B+kdA+jeA,kfA]fgA-k|q^fhA0oiA_f}q.kjA`fkA/klA{f~q:kar|fmA;kbr}fcrtldrhvnAuloAivervlpAjvqAwlrAkvsAxltAlvuAylvAwxwAzlxAmvyAAlzAnvfrBlAA~fBA)oCAaggrClDAbghrDlir,jEAEljrcgkrFllrdgmrGlnregFAHlGA,oHAfgorIlprJlIA=kqr*oJAKlKAEobmpz3kLlLA0lMA-j3eovNAxkOAykPApvQA6d0k1k7dVe4B-v5BMlrrqzRARb?ksrSb6BTb7BUbyftrVb4eNlurOlvrPlwrQlxrRlyrSlzrTlArUlBrXzSAVlCrWbXbYbZb0b1b2b7v3b8v4b9v5b!v6b#v7b$v8bRu9bSu!bTu#bUu$bVu%bWu'bXu(bYu)bZu*b0u+b1u,b2u-b3u.b4u/b5u:b6u;b7u=b8u?bTA@bUA[bxx]byx^bzx_bAx`bBx{bCx|bDx}bEx~bFxacGxbcHxccIxdcJxecKxfcLxgcMxhcNxicOxjcPxkcQxlcRxmcVAncrzocszpctzqcuzrcvzscwztcxzucyzvczzwcAzxcBzycCzzcDzAcEzBcFzCcGzDcEcHz=jcvIzdvthJzevuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-rWA.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLdXA*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUfjy+m,m-my 2 .mVfWfz /m:m;m=m?mky@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iFoGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotWlptYzYA5e+oZAXlqtrt0A1A2Astttutvt3AwtxtytztAtBtCtDtEtFtGt4AHtItJtKtLt5AMt6ANtOt7APtQtRt8AStYlTt6e7e8eUtVtWtXtYtZt0t1t9A!A2t3t4t5t9e!e#e$elyZl6t%e'e(e)e7t8t9t!t#t$t%tP 'tKz(t8B)tHB*t#A+tIB,tJB-tKB.tLB/t$A:tMB;tNB=tOB?tPB@tQB[tRB]tSB^tTB_tUB`tVB{tWB|tDy}tXB~t%AauYBbuZB'A=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuIowfxffuguhu(A)Aiujukulumunu*A+Aoupu,A-Aqu.A/Arusutuuu:Agg^xhgigjgkg_xlg`xmg{x|xng}xogpg~xqgrgsgtgugaybycydyvgwgxgygeyfymyzgAgnyoyBgCg;AvuwuEy=Axuyu?A@A[AzuAuBuCu]A^A_ADuEu`AFuGuHuIuJu{A|AKuLu}AMuNu~AOuPuaB

1421 except AttributeError: 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1422 with nogil: 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1423 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1424 devices = _tls.devices = [] 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1425 for dev_id in range(total): 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1426 device = super(Device, cls).__new__(cls) 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1427 device._device_id = dev_id 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1428 device._memory_resource = None 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1429 device._has_inited = False 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1430 device._properties = None 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1431 device._uuid = None 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1432 device._context = None 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1433 devices.append(device) 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu

1434 return devices 2a fv-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprp,vsptpupvpwpDgEgFgxpGgHgIgypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p+eXe0dJgJeKeKg$p%p'p(pudLgMgNgOgPg)p*p,eYe1dQgLeMeRg+p,p-p.pvdSgTgUgVg/p:pWgXgYg;pZg0g1g2g3g4g5g6g7g-eZe2d8gNeOe9g=p?p@p[pwd!g#g$g%g'g]p^p.e0e3d(gPeQe)g_p`p{p|pxd*g+g,g-g.g}p~p/e1e4d/gReSe:gaqbqcqdqyd;g=g?g@g[geqfq:e2e5d]gTeUe^ggqhqiqjqzd_g`g{g|g}gkqlq~gahbhchdhehfhghhhihjhkhlhmhnhohphqhmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8qumvm1lDeq ?jr wmj xm6kym#o$oQ ~kCv!q#q$q%q'q(q)qzmmjrhnjojxjyjzjpjqjAjBjrjCjshDj2kG @j*qGk+q,q-q.q/q:q;qrvgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQb;e2l3lFj=q?q@q4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lamWe[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrbm3k3e6d7dVe-vrrRbsrSbTbUbtrVb4eurvrwrxryrzrArBrCrWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcthuhGj8dDrTnUnvhAmBmCmwhErFrGrHrFc9dxhyhGcIrVnJrKrHjHcWnzhIj!dLrXnHkAhDmEmFmBhMrNrOrPrIc#dChDhJcQrYnRrSrAdzfAfEhFhGhHhBdIhJhKhLh5 f Jj6 gjhj7 KjLjMjNjb g Oj8 9 c PjQjRjR S $d%d'd(d)dMh*dNhGmHmOhTrUrVr+dPhQhWrXrYr3fsj! Zn4falbl5f0n1n2n3nH # 4n6f7fI 5n6n7nEe*em Ik.jFeSjTjUjGeJkKkLkMkk n NkHeIel Ok/jPkQkRhCdBfCfShThUhVhDdWhXhYhZhDfijT ImclEfJmKmFfLmMmNmOms U PmGfHft QmRmSmTmUmVmWmXmYmZm0m1m2m3mEdIfJf0h1h2h3h4h5h6h7h,dZr8h4m5m9h0r1r2r-d!h#h3r4r5r6r7r8r9r!r#r$r%r'r$ KcLc% u v ' McNcOcPcQc( ) RcScTcFdV W Gd.d/d:dHdId;d=d$h?d(r%h6m7m'h)r*r+r,rUc@d(h)hVc-r.rJdKfLf*h+h,h-h.hKdMfNf/h:h;h=h?h@h* WcXc+ w x , YcZc0c1c2c3c- . 4c5c6c[h[d]h8m9m^h/r:r;r]d_h`h=r?r8ftj/ 8ncm9fdlelfl!f9n!n#n$nJ : %n#f$fK 'n(n)n@r{hVjLd*n[r|h!m#m$m}h]r^r_r`r7cMd~hai8c{r+n|r}rNdOfPfbicidieiOdfigihiii; h Wj= jjkj? XjYjZj0jd i 1j@ [ e 2j3j4jX Y ^d_d`d{d|dji}dki%m'mli~rasbs~dminicsdses%fuj] ,n'fglhl(f-n.n/n:nL ^ ;n)f*fM =n?n@n;fvj9cJodm=filjlkl?fKoLoMoNoZ !cOo@f[f0 PoemQoRooiPdQfRfpiqirisiQdtiuiviwiSflj1 (mllTf)m*mUf+m,m-my 2 .mVfWfz /m:m;m=m?m@m[m]m^m_m`m{m|mRdXfYfxiyiziAiBiCiDiEiaefsFi}m~mGigshsisbeHiIijskslsmsnsospsqsrssstsus_ #c$c` A B { %c'c(c)c*c| } +c,c-cSd3 4 TdcedeeeUdVdfegeJihevsKianbnLiwsxsyszs.cieMiNi/cAsBsCsWdZf0fOiPiQiRiSiXd1f2fTiUiViWiXiYi~ :c;cabC D bb=c?c@c[c]c^ccbdb_c`c{cZije0icndn1iDsEsFske2iGsHs+fwjeb[nfm,fmlnlol-f]n^n_n`nN fb{n.f/fO |n}n~nIsSoToE F o p |c}c3i5jleJsaoRk4ienfngn5iKsLsMsNs~cme6i7iadbdOscdddPsQsboRsSs8i6jYdTscoUs9ihninjn!iVsWsXsYsedZd#i$ifdZsdo0s1s%i7jne2seoSk'iknlnmn(i3s4s5s6sgdoe)i*ihd7sfo8s9s+i8jpe!sgoTk,innonpn-i#s$s%s'sidqe.i/ijd(sho)s*s:i9jre+sio[j;iqnrnsn=i,s-s.s/skdse?i@ild:sjo;s=s[i!jte?sko]j]itnunvn^i@s[s]s^smdue_i`ind_slo`s{s{i#jve|smo}s|iwnxnyn}i~satbtctodwe~iajpdqddtnoetftbj$jxegtoohtcjznAnBndjitjtktltrdyeejfjsdtdmtpontotpt5eqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTt6e7e8eUtVtWtXtYtZt0t1t2t3t4t5t9e!e#e$e6t%e'e(e)e7t8t9t!t#t$t%tP 't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubu=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfzeAeBeCecudueuwfxffuguhuiujukulumunuoupuqurusutuuugghgigjgkglgmgngogpgqgrgsgtgugvgwgxgygzgAgBgCgvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPu