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
« 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
5from __future__ import annotations
7cimport cpython
8from libc.stdint cimport uintptr_t
10from cuda.bindings cimport cydriver
11from cuda.core._utils.cuda_utils cimport HANDLE_RETURN
13import threading
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)
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
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
45cdef class DeviceProperties:
46 """
47 A class to query various attributes of a CUDA device.
49 Attributes are read-only and provide information about the device.
50 """
51 cdef:
52 int _handle
53 dict _cache
55 def __init__(self, *args, **kwargs):
56 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2DD
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 )
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
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
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
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
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
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 )
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 )
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
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
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
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 )
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 )
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 )
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
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
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 )
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
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 )
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 )
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 )
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 )
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
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
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
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
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
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
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
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 )
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
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 )
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 )
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
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 )
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 )
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 )
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 )
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
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
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
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 )
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
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
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
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 )
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 )
551 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
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
558 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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
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 )
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
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
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 )
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 )
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 )
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 )
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
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
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 )
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
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
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 )
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
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
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
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
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
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
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
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
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 )
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
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
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 )
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
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 )
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 )
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
797 # Start of CUDA 12 device attributes
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
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
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 )
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 )
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
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
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
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
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
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
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
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.
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
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.
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
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 )
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 )
890 # Start of CUDA 13 device attributes
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 )
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 )
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 )
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 )
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 )
932class Device:
933 """Represent a GPU and act as an entry point for cuda.core features.
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.
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.
944 Newly returned :obj:`~_device.Device` objects are thread-local singletons
945 for a specified device.
947 Note
948 ----
949 Will not initialize the GPU.
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.
957 """
958 __slots__ = ("_device_id", "_memory_resource", "_has_inited", "_properties", "_uuid", "_context", "__weakref__")
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
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
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
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 )
980 @classmethod
981 def get_all_devices(cls):
982 """
983 Query the available device instances.
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
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).
1000 The devices are mapped to one another by their UUID.
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
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 )
1014 from cuda.core.system import Device as SystemDevice 2qv
1015 return SystemDevice(uuid=self.uuid) 2qv
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
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
1028 def can_access_peer(self, peer: Device | int) -> bool:
1029 """Check if this device can access memory from the specified peer device.
1031 Queries whether peer-to-peer memory access is supported between this
1032 device and the specified peer device.
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)
1049 @property
1050 def uuid(self) -> str:
1051 """Return a UUID for the device.
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.
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.
1062 The UUID is cached after first access to avoid repeated CUDA API calls.
1064 """
1065 cdef cydriver.CUuuid uuid
1066 cdef cydriver.CUdevice dev
1067 cdef bytes uuid_b
1068 cdef str uuid_hex
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
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
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
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
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
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
1119 @property
1120 def context(self) -> Context:
1121 """Return the :obj:`~_context.Context` associated with this device.
1123 Note
1124 ----
1125 Device must be initialized.
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
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)
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
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
1160 @property
1161 def default_stream(self) -> Stream:
1162 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1164 The type of default stream returned depends on if the environment
1165 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1167 If set, returns a per-thread default stream. Otherwise returns
1168 the legacy stream.
1170 """
1171 return default_stream() 2~waxbxcxdxgbexfxgxhxhbixjxibkxlxmxjbnxoxpxqxkbrxsxtxuxvx8B
1173 def __int__(self):
1174 """Return device_id."""
1175 return self._device_id 2jCkClCEkFk
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
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
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
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
1191 def set_current(self, ctx: Context = None) -> Context | None:
1192 """Set device to be used for GPU executions.
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.
1198 Providing a `ctx` causes the previous set context to be popped and returned.
1200 Parameters
1201 ----------
1202 ctx : :obj:`~_context.Context`, optional
1203 Optional context to push onto this device's current thread stack.
1205 Returns
1206 -------
1207 :obj:`~_context.Context`, optional
1208 Popped context.
1210 Examples
1211 --------
1212 Acts as an entry point of this object. Users always start a code by
1213 calling this method, e.g.
1215 >>> from cuda.core import Device
1216 >>> dev0 = Device(0)
1217 >>> dev0.set_current()
1218 >>> # ... do work on device 0 ...
1220 """
1221 cdef ContextHandle h_context
1222 cdef cydriver.CUcontext prev_ctx, curr_ctx
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
1252 def create_context(self, options: ContextOptions = None) -> Context:
1253 """Create a new :obj:`~_context.Context` object.
1255 Note
1256 ----
1257 The newly context will not be set as current.
1259 Parameters
1260 ----------
1261 options : :obj:`~_context.ContextOptions`, optional
1262 Customizable dataclass for context creation options.
1264 Returns
1265 -------
1266 :obj:`~_context.Context`
1267 Newly created context object.
1269 """
1270 raise NotImplementedError("WIP: https://github.com/NVIDIA/cuda-python/issues/189")
1272 def create_stream(self, obj: IsStreamT | None = None, options: StreamOptions | None = None) -> Stream:
1273 """Create a Stream object.
1275 New stream objects can be created in two different ways:
1277 1) Create a new CUDA stream with customizable ``options``.
1278 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1280 Option (2) internally holds a reference to the foreign object
1281 such that the lifetime is managed.
1283 Note
1284 ----
1285 Device must be initialized.
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.
1294 Returns
1295 -------
1296 :obj:`~_stream.Stream`
1297 Newly created stream object.
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
1303 def create_event(self, options: EventOptions | None = None) -> Event:
1304 """Create an Event object without recording it to a Stream.
1306 Note
1307 ----
1308 Device must be initialized.
1310 Parameters
1311 ----------
1312 options : :obj:`EventOptions`, optional
1313 Customizable dataclass for event creation options.
1315 Returns
1316 -------
1317 :obj:`~_event.Event`
1318 Newly created event object.
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
1325 def allocate(self, size, stream: Stream | GraphBuilder | None = None) -> Buffer:
1326 """Allocate device memory from a specified stream.
1328 Allocates device memory of `size` bytes on the specified `stream`
1329 using the memory resource currently associated with this Device.
1331 Parameter `stream` is optional, using a default stream by default.
1333 Note
1334 ----
1335 Device must be initialized.
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.
1345 Returns
1346 -------
1347 :obj:`~_memory.Buffer`
1348 Newly created buffer object.
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
1354 def sync(self):
1355 """Synchronize the device.
1357 Note
1358 ----
1359 Device must be initialized.
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
1365 def create_graph_builder(self) -> GraphBuilder:
1366 """Create a new :obj:`~_graph.GraphBuilder` object.
1368 Returns
1369 -------
1370 :obj:`~_graph.GraphBuilder`
1371 Newly created graph builder object.
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
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
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
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