Coverage for cuda / core / _device.pyx: 90.93%
419 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-29 01:27 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-29 01:27 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport HANDLE_RETURN
12import threading
14from cuda.core._context cimport Context
15from cuda.core._context import ContextOptions
16from cuda.core._event cimport Event as cyEvent
17from cuda.core._event import Event, EventOptions
18from cuda.core._memory._buffer cimport Buffer, MemoryResource
19from cuda.core._resource_handles cimport (
20 ContextHandle,
21 create_context_handle_ref,
22 get_primary_context,
23 as_cu,
24)
26from cuda.core._stream import IsStreamT, Stream, StreamOptions
27from cuda.core._utils.clear_error_support import assert_type
28from cuda.core._utils.cuda_utils import (
29 ComputeCapability,
30 CUDAError,
31 driver,
32 handle_return,
33 runtime,
34)
35from cuda.core._stream cimport default_stream
37# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
38# but it seems it is very convenient to expose them for testing purposes...
39_tls = threading.local()
40_lock = threading.Lock()
41cdef bint _is_cuInit = False
44cdef class DeviceProperties:
45 """
46 A class to query various attributes of a CUDA device.
48 Attributes are read-only and provide information about the device.
49 """
50 cdef:
51 int _handle
52 dict _cache
54 def __init__(self, *args, **kwargs):
55 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2|D
57 @classmethod
58 def _init(cls, handle):
59 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
60 self._handle = handle 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
61 self._cache = {} 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
62 return self 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
64 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
65 """Retrieve the attribute value directly from the driver."""
66 cdef int val
67 cdef cydriver.CUresult err
68 with nogil: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
69 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
70 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
71 return <int>default
72 HANDLE_RETURN(err) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
73 return val 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq @y9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}vpy6w7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
75 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
76 """Retrieve the attribute value, using cache if applicable."""
77 if attr not in self._cache: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAyByCyDyEyFy3kGyHyIyJyKyLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPosj3w4w5w|v'v}v6w[y7w~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
78 self._cache[attr] = self._get_attribute(attr, default) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhk?fDeq 9jr !js #jt $ju %jdg2nPosj3w4w5w|v'v}v6w7w~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVlWl~f`o'jXlagYlbgZlcg(j0l{o`k1loh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
79 return self._cache[attr] 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAyByCyDyEyFy3kGyHyIyJyKyLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPosj3w4w5w|v'v}v6w[y7w~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^b_b`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcaybygccyhcdyiceyjcfykcgylchymciyncjyockypcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
81 @property
82 def max_threads_per_block(self) -> int:
83 """int: Maximum number of threads per block."""
84 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2tjBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjyky
86 @property
87 def max_block_dim_x(self) -> int:
88 """int: Maximum block dimension X."""
89 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2]w
91 @property
92 def max_block_dim_y(self) -> int:
93 """int: Maximum block dimension Y."""
94 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2^w
96 @property
97 def max_block_dim_z(self) -> int:
98 """int: Maximum block dimension Z."""
99 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2_w
101 @property
102 def max_grid_dim_x(self) -> int:
103 """int: Maximum grid dimension X."""
104 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2{wIk
106 @property
107 def max_grid_dim_y(self) -> int:
108 """int: Maximum grid dimension Y."""
109 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2|w
111 @property
112 def max_grid_dim_z(self) -> int:
113 """int: Maximum grid dimension Z."""
114 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2}w
116 @property
117 def max_shared_memory_per_block(self) -> int:
118 """int: Maximum shared memory available per block in bytes."""
119 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2cxBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv@x[x]x^x_x`x{x|x}x~xaybycydyeyfygyhyiyjyky
121 @property
122 def total_constant_memory(self) -> int:
123 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
124 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2Qx
126 @property
127 def warp_size(self) -> int:
128 """int: Warp size in threads."""
129 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2Tx
131 @property
132 def max_pitch(self) -> int:
133 """int: Maximum pitch in bytes allowed by memory copies."""
134 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2ax
136 @property
137 def maximum_texture1d_width(self) -> int:
138 """int: Maximum 1D texture width."""
139 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2nx
141 @property
142 def maximum_texture1d_linear_width(self) -> int:
143 """int: Maximum width for a 1D texture bound to linear memory."""
144 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2vj
146 @property
147 def maximum_texture1d_mipmapped_width(self) -> int:
148 """int: Maximum mipmapped 1D texture width."""
149 return self._get_cached_attribute( 2qw
150 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2qw
151 )
153 @property
154 def maximum_texture2d_width(self) -> int:
155 """int: Maximum 2D texture width."""
156 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2vx
158 @property
159 def maximum_texture2d_height(self) -> int:
160 """int: Maximum 2D texture height."""
161 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2qx
163 @property
164 def maximum_texture2d_linear_width(self) -> int:
165 """int: Maximum width for a 2D texture bound to linear memory."""
166 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2ux
168 @property
169 def maximum_texture2d_linear_height(self) -> int:
170 """int: Maximum height for a 2D texture bound to linear memory."""
171 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2sx
173 @property
174 def maximum_texture2d_linear_pitch(self) -> int:
175 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
176 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2tx
178 @property
179 def maximum_texture2d_mipmapped_width(self) -> int:
180 """int: Maximum mipmapped 2D texture width."""
181 return self._get_cached_attribute( 2tw
182 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2tw
183 )
185 @property
186 def maximum_texture2d_mipmapped_height(self) -> int:
187 """int: Maximum mipmapped 2D texture height."""
188 return self._get_cached_attribute( 2jj
189 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2jj
190 )
192 @property
193 def maximum_texture3d_width(self) -> int:
194 """int: Maximum 3D texture width."""
195 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2yx
197 @property
198 def maximum_texture3d_height(self) -> int:
199 """int: Maximum 3D texture height."""
200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2xx
202 @property
203 def maximum_texture3d_depth(self) -> int:
204 """int: Maximum 3D texture depth."""
205 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2wx
207 @property
208 def maximum_texture3d_width_alternate(self) -> int:
209 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
210 return self._get_cached_attribute( 2ww
211 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2ww
212 )
214 @property
215 def maximum_texture3d_height_alternate(self) -> int:
216 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
217 return self._get_cached_attribute( 2vw
218 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2vw
219 )
221 @property
222 def maximum_texture3d_depth_alternate(self) -> int:
223 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
224 return self._get_cached_attribute( 2uw
225 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2uw
226 )
228 @property
229 def maximum_texturecubemap_width(self) -> int:
230 """int: Maximum cubemap texture width or height."""
231 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2zx
233 @property
234 def maximum_texture1d_layered_width(self) -> int:
235 """int: Maximum 1D layered texture width."""
236 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2mx
238 @property
239 def maximum_texture1d_layered_layers(self) -> int:
240 """int: Maximum layers in a 1D layered texture."""
241 return self._get_cached_attribute( 2pw
242 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2pw
243 )
245 @property
246 def maximum_texture2d_layered_width(self) -> int:
247 """int: Maximum 2D layered texture width."""
248 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2rx
250 @property
251 def maximum_texture2d_layered_height(self) -> int:
252 """int: Maximum 2D layered texture height."""
253 return self._get_cached_attribute( 2rw
254 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2rw
255 )
257 @property
258 def maximum_texture2d_layered_layers(self) -> int:
259 """int: Maximum layers in a 2D layered texture."""
260 return self._get_cached_attribute( 2sw
261 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2sw
262 )
264 @property
265 def maximum_texturecubemap_layered_width(self) -> int:
266 """int: Maximum cubemap layered texture width or height."""
267 return self._get_cached_attribute( 2xw
268 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2xw
269 )
271 @property
272 def maximum_texturecubemap_layered_layers(self) -> int:
273 """int: Maximum layers in a cubemap layered texture."""
274 return self._get_cached_attribute( 2kj
275 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2kj
276 )
278 @property
279 def maximum_surface1d_width(self) -> int:
280 """int: Maximum 1D surface width."""
281 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2ex
283 @property
284 def maximum_surface2d_width(self) -> int:
285 """int: Maximum 2D surface width."""
286 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2hx
288 @property
289 def maximum_surface2d_height(self) -> int:
290 """int: Maximum 2D surface height."""
291 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2fx
293 @property
294 def maximum_surface3d_width(self) -> int:
295 """int: Maximum 3D surface width."""
296 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2kx
298 @property
299 def maximum_surface3d_height(self) -> int:
300 """int: Maximum 3D surface height."""
301 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2jx
303 @property
304 def maximum_surface3d_depth(self) -> int:
305 """int: Maximum 3D surface depth."""
306 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2ix
308 @property
309 def maximum_surface1d_layered_width(self) -> int:
310 """int: Maximum 1D layered surface width."""
311 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2dx
313 @property
314 def maximum_surface1d_layered_layers(self) -> int:
315 """int: Maximum layers in a 1D layered surface."""
316 return self._get_cached_attribute( 2kw
317 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2kw
318 )
320 @property
321 def maximum_surface2d_layered_width(self) -> int:
322 """int: Maximum 2D layered surface width."""
323 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2gx
325 @property
326 def maximum_surface2d_layered_height(self) -> int:
327 """int: Maximum 2D layered surface height."""
328 return self._get_cached_attribute( 2lw
329 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2lw
330 )
332 @property
333 def maximum_surface2d_layered_layers(self) -> int:
334 """int: Maximum layers in a 2D layered surface."""
335 return self._get_cached_attribute( 2mw
336 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2mw
337 )
339 @property
340 def maximum_surfacecubemap_width(self) -> int:
341 """int: Maximum cubemap surface width."""
342 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2lx
344 @property
345 def maximum_surfacecubemap_layered_width(self) -> int:
346 """int: Maximum cubemap layered surface width."""
347 return self._get_cached_attribute( 2ow
348 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2ow
349 )
351 @property
352 def maximum_surfacecubemap_layered_layers(self) -> int:
353 """int: Maximum layers in a cubemap layered surface."""
354 return self._get_cached_attribute( 2nw
355 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2nw
356 )
358 @property
359 def max_registers_per_block(self) -> int:
360 """int: Maximum number of 32-bit registers available to a thread block."""
361 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2bx
363 @property
364 def clock_rate(self) -> int:
365 """int: Typical clock frequency in kilohertz."""
366 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2De@ypyJ 2kBj
368 @property
369 def texture_alignment(self) -> int:
370 """int: Alignment requirement for textures."""
371 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2Ox
373 @property
374 def texture_pitch_alignment(self) -> int:
375 """int: Pitch alignment requirement for textures."""
376 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2Px
378 @property
379 def gpu_overlap(self) -> bool:
380 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use instead async_engine_count."""
381 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2+w
383 @property
384 def multiprocessor_count(self) -> int:
385 """int: Number of multiprocessors on device."""
386 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2GxIk
388 @property
389 def kernel_exec_timeout(self) -> bool:
390 """bool: Specifies whether there is a run time limit on kernels."""
391 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2qy
393 @property
394 def integrated(self) -> bool:
395 """bool: Device is integrated with host memory."""
396 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2:w
398 @property
399 def can_map_host_memory(self) -> bool:
400 """bool: Device can map host memory into CUDA address space."""
401 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 24w
403 @property
404 def compute_mode(self) -> int:
405 """int: Compute mode (See CUcomputemode for details)."""
406 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2ik
408 @property
409 def concurrent_kernels(self) -> bool:
410 """bool: Device can possibly execute multiple kernels concurrently."""
411 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 28w
413 @property
414 def ecc_enabled(self) -> bool:
415 """bool: Device has ECC support enabled."""
416 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2%w
418 @property
419 def pci_bus_id(self) -> int:
420 """int: PCI bus ID of the device."""
421 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2Jx
423 @property
424 def pci_device_id(self) -> int:
425 """int: PCI device ID of the device."""
426 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2Kx
428 @property
429 def pci_domain_id(self) -> int:
430 """int: PCI domain ID of the device."""
431 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2Lx
433 @property
434 def tcc_driver(self) -> bool:
435 """bool: Device is using TCC driver model."""
436 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2Nx
438 @property
439 def memory_clock_rate(self) -> int:
440 """int: Peak memory clock frequency in kilohertz."""
441 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2ry
443 @property
444 def global_memory_bus_width(self) -> int:
445 """int: Global memory bus width in bits."""
446 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2(w
448 @property
449 def l2_cache_size(self) -> int:
450 """int: Size of L2 cache in bytes."""
451 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2=w
453 @property
454 def max_threads_per_multiprocessor(self) -> int:
455 """int: Maximum resident threads per multiprocessor."""
456 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2ujBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv
458 @property
459 def unified_addressing(self) -> bool:
460 """bool: Device shares a unified address space with the host."""
461 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a Aj
463 @property
464 def compute_capability_major(self) -> int:
465 """int: Major compute capability version number."""
466 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPo[yJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe
468 @property
469 def compute_capability_minor(self) -> int:
470 """int: Minor compute capability version number."""
471 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPo7wJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe
473 @property
474 def global_l1_cache_supported(self) -> bool:
475 """bool: Device supports caching globals in L1."""
476 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2'w
478 @property
479 def local_l1_cache_supported(self) -> bool:
480 """bool: Device supports caching locals in L1."""
481 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2?w
483 @property
484 def max_shared_memory_per_multiprocessor(self) -> int:
485 """int: Maximum shared memory available per multiprocessor in bytes."""
486 return self._get_cached_attribute( 2jwBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv
487 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2jwBwCwDwEwFwGwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv
488 )
490 @property
491 def max_registers_per_multiprocessor(self) -> int:
492 """int: Maximum number of 32-bit registers available per multiprocessor."""
493 return self._get_cached_attribute( 2hwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv
494 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2hwjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv
495 )
497 @property
498 def managed_memory(self) -> bool:
499 """bool: Device can allocate managed memory on this system."""
500 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2@w
502 @property
503 def multi_gpu_board(self) -> bool:
504 """bool: Device is on a multi-GPU board."""
505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2yj
507 @property
508 def multi_gpu_board_group_id(self) -> int:
509 """int: Unique id for a group of devices on the same multi-GPU board."""
510 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2Ex
512 @property
513 def host_native_atomic_supported(self) -> bool:
514 """bool: Link between the device and the host supports all native atomic operations."""
515 return bool( 2ew
516 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2ew
517 )
519 @property
520 def single_to_double_precision_perf_ratio(self) -> int:
521 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
522 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2sy
524 @property
525 def pageable_memory_access(self) -> bool:
526 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
527 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2Ix
529 @property
530 def concurrent_managed_access(self) -> bool:
531 """bool: Device can coherently access managed memory concurrently with the CPU."""
532 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 2XeYeZe0e1e2e9w-e.eQoIl.kVxJlKl/k:kLlMlpkFkNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9v0l1l
534 @property
535 def compute_preemption_supported(self) -> bool:
536 """bool: Device supports compute preemption."""
537 return bool( 2~v
538 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2~v
539 )
541 @property
542 def can_use_host_pointer_for_registered_mem(self) -> bool:
543 """bool: Device can access host registered memory at the same virtual address as the CPU."""
544 return bool( 2'v
545 self._get_cached_attribute( 2'v
546 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2'v
547 )
548 )
550 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
552 @property
553 def cooperative_launch(self) -> bool:
554 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
555 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2!wIk
557 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
559 @property
560 def max_shared_memory_per_block_optin(self) -> int:
561 """int: Maximum optin shared memory per block."""
562 return self._get_cached_attribute( 2iw
563 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2iw
564 )
566 @property
567 def pageable_memory_access_uses_host_page_tables(self) -> bool:
568 """bool: Device accesses pageable memory via the host's page tables."""
569 return bool( 2:v
570 self._get_cached_attribute( 2:v
571 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2:v
572 )
573 )
575 @property
576 def direct_managed_mem_access_from_host(self) -> bool:
577 """bool: The host can directly access managed memory on the device without migration."""
578 return bool( 2)v
579 self._get_cached_attribute( 2)v
580 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2)v
581 )
582 )
584 @property
585 def virtual_memory_management_supported(self) -> bool:
586 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
587 return bool( 2=vGk3n4nHkVe
588 self._get_cached_attribute( 2=vGk3n4nHkVe
589 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2=vGk3n4nHkVe
590 )
591 )
593 @property
594 def handle_type_posix_file_descriptor_supported(self) -> bool:
595 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
596 return bool( 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv+vT XvYvZvH I o p
597 self._get_cached_attribute( 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv+vT XvYvZvH I o p
598 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv+vT XvYvZvH I o p
599 )
600 )
602 @property
603 def handle_type_win32_handle_supported(self) -> bool:
604 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
605 return bool( 2ij
606 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2ij
607 )
609 @property
610 def handle_type_win32_kmt_handle_supported(self) -> bool:
611 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
612 return bool( 2,v
613 self._get_cached_attribute( 2,v
614 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2,v
615 )
616 )
618 @property
619 def max_blocks_per_multiprocessor(self) -> int:
620 """int: Maximum number of blocks per multiprocessor."""
621 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2`w
623 @property
624 def generic_compression_supported(self) -> bool:
625 """bool: Device supports compression of memory."""
626 return bool( 2aw
627 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2aw
628 )
630 @property
631 def max_persisting_l2_cache_size(self) -> int:
632 """int: Maximum L2 persisting lines capacity setting in bytes."""
633 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2~w
635 @property
636 def max_access_policy_window_size(self) -> int:
637 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
638 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2[w
640 @property
641 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
642 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
643 return bool( 2*v
644 self._get_cached_attribute( 2*v
645 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2*v
646 )
647 )
649 @property
650 def reserved_shared_memory_per_block(self) -> int:
651 """int: Shared memory reserved by CUDA driver per block in bytes."""
652 return self._get_cached_attribute( 2zw
653 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2zw
654 )
656 @property
657 def sparse_cuda_array_supported(self) -> bool:
658 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
659 return bool( 2lj
660 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2lj
661 )
663 @property
664 def read_only_host_register_supported(self) -> bool:
665 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTERGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
666 return bool( 2yw
667 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2yw
668 )
670 @property
671 def memory_pools_supported(self) -> bool:
672 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
673 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFoGoHoIoJoKoLoMoNoVwWwXwYwZw0w'eXeFgJeKeGgwdHgIgJgKgLg(eYeMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe5gNeOe6gyd7g8g9g!g#g*e0e$gPeQe%gzd'g(g)g*g+g+e1e,gReSe-gAd.g/g:g;g=g,e2e?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh1w2wOoYnZnvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRy7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvCx-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9v(j0l`k1loh{k|kT XvYvSyZvphqhrhshthuhvhwhxhyhCdxfyfzhAhBhChDdDhEhFhGh8 9 ! # $ HhIhJhKhLh1f2f3f4f5fEeFeGeHeIeMhEdzfAfNhOhPhQhFdRhShThUhBfCfDfEfFfGdGfHfVhWhXhYhZh0h1h2h3h4h5h6h( ) * + , IdJdKd7h8h9h!h#hLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- . / : ; :h;h=h?h@h6f7f8f9f!f[h]h^h_h`hPdMfNf{h|h}h~hQdaibicidi@ [ ] ^ _ Tyeifigihi#f$f%f'f(f.f/f:f;f=fiiRdOfPfjikilimiSdnioipiqiQfRfSfTfUfTdVfWfrisitiuiviwixiyiziAiBiCi| } ~ abbbVdWdXdDiEiFiGiHiYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicbdbebfbgbTiUiViWiXi)f*f+f,f-fH I o p YiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iaj
675 @property
676 def gpu_direct_rdma_supported(self) -> bool:
677 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
678 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2)wHkVe
680 @property
681 def gpu_direct_rdma_flush_writes_options(self) -> int:
682 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
683 return self._get_cached_attribute( 2hj
684 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2hj
685 )
687 @property
688 def gpu_direct_rdma_writes_ordering(self) -> int:
689 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
690 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2*w
692 @property
693 def mempool_supported_handle_types(self) -> int:
694 """int: Handle types supported with mempool based IPC."""
695 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2Dx
697 @property
698 def deferred_mapping_cuda_array_supported(self) -> bool:
699 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
700 return bool( 2(v
701 self._get_cached_attribute( 2(v
702 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2(v
703 )
704 )
706 @property
707 def numa_config(self) -> int:
708 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
709 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2Hx
711 @property
712 def numa_id(self) -> int:
713 """int: NUMA node ID of the GPU memory."""
714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2zj
716 @property
717 def multicast_supported(self) -> bool:
718 """bool: Device supports switch multicast and reduction operations."""
719 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2Fx
721 @property
722 def surface_alignment(self) -> int:
723 """int: Surface alignment requirement in bytes."""
724 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2Mx
726 @property
727 def async_engine_count(self) -> int:
728 """int: Number of asynchronous engines."""
729 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2sj
731 @property
732 def can_tex2d_gather(self) -> bool:
733 """bool: True if device supports 2D texture gather operations, False if not."""
734 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 25w
736 @property
737 def maximum_texture2d_gather_width(self) -> int:
738 """int: Maximum 2D texture gather width."""
739 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2px
741 @property
742 def maximum_texture2d_gather_height(self) -> int:
743 """int: Maximum 2D texture gather height."""
744 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2ox
746 @property
747 def stream_priorities_supported(self) -> bool:
748 """bool: True if device supports stream priorities, False if not."""
749 return bool( 2Aw
750 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2Aw
751 )
753 @property
754 def can_flush_remote_writes(self) -> bool:
755 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
756 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 23w
758 @property
759 def host_register_supported(self) -> bool:
760 """bool: Device supports host memory registration via cudaHostRegister."""
761 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2/w
763 @property
764 def timeline_semaphore_interop_supported(self) -> bool:
765 """bool: External timeline semaphore interop is supported on the device."""
766 return bool( 2;v
767 self._get_cached_attribute( 2;v
768 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 2;v
769 )
770 )
772 @property
773 def cluster_launch(self) -> bool:
774 """bool: Indicates device supports cluster launch."""
775 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 26w
777 @property
778 def can_use_64_bit_stream_mem_ops(self) -> bool:
779 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
780 return bool( 2|v
781 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2|v
782 )
784 @property
785 def can_use_stream_wait_value_nor(self) -> bool:
786 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
787 return bool( 2}v
788 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2}v
789 )
791 @property
792 def dma_buf_supported(self) -> bool:
793 """bool: Device supports buffer sharing with dma_buf mechanism."""
794 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2$w
796 # Start of CUDA 12 device attributes
798 @property
799 def ipc_event_supported(self) -> bool:
800 """bool: Device supports IPC Events."""
801 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2;w
803 @property
804 def mem_sync_domain_count(self) -> int:
805 """int: Number of memory domains the device supports."""
806 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2Bx
808 @property
809 def tensor_map_access_supported(self) -> bool:
810 """bool: Device supports accessing memory using Tensor Map."""
811 return bool( 2mj/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvf
812 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2mj/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvf
813 )
815 @property
816 def handle_type_fabric_supported(self) -> bool:
817 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
818 return bool( 2bw
819 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2bw
820 )
822 @property
823 def unified_function_pointers(self) -> bool:
824 """bool: Device supports unified function pointers."""
825 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2Rx
827 @property
828 def mps_enabled(self) -> bool:
829 """bool: Indicates if contexts created on this device will be shared via MPS."""
830 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2xj
832 @property
833 def host_numa_id(self) -> int:
834 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
835 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2alblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm.w:k|f}f|o~f'jagbgcgl rksk
837 @property
838 def d3d12_cig_supported(self) -> bool:
839 """bool: Device supports CIG with D3D12."""
840 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2#w
842 @property
843 def mem_decompress_algorithm_mask(self) -> int:
844 """int: The returned valued shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
845 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2wj
847 @property
848 def mem_decompress_maximum_length(self) -> int:
849 """int: The returned valued is the maximum length in bytes of a single decompress operation that is allowed."""
850 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2Ax
852 @property
853 def vulkan_cig_supported(self) -> bool:
854 """bool: Device supports CIG with Vulkan."""
855 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2Sx
857 @property
858 def gpu_pci_device_id(self) -> int:
859 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
861 Returns 0 if the driver does not support this query.
862 """
863 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2,w
865 @property
866 def gpu_pci_subsystem_id(self) -> int:
867 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
869 Returns 0 if the driver does not support this query.
870 """
871 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2-w
873 @property
874 def host_numa_virtual_memory_management_supported(self) -> bool:
875 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
876 return bool( 2-v
877 self._get_cached_attribute( 2-v
878 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2-v
879 )
880 )
882 @property
883 def host_numa_memory_pools_supported(self) -> bool:
884 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
885 return bool( 2fw
886 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2fw
887 )
889 # Start of CUDA 13 device attributes
891 @property
892 def host_numa_multinode_ipc_supported(self) -> bool:
893 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
894 return bool( 2gw
895 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2gw
896 )
898 @property
899 def host_memory_pools_supported(self) -> bool:
900 """bool: Device suports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
901 return bool( 2alblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAmdw0kTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg{oWx|k2lqkl 3l!vrksk#v
902 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2alblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAmdw0kTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg{oWx|k2lqkl 3l!vrksk#v
903 )
905 @property
906 def host_virtual_memory_management_supported(self) -> bool:
907 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
908 return bool( 2.v
909 self._get_cached_attribute( 2.v
910 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2.v
911 )
912 )
914 @property
915 def host_alloc_dma_buf_supported(self) -> bool:
916 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
917 return bool( 2cw
918 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2cw
919 )
921 @property
922 def only_partial_host_native_atomic_supported(self) -> bool:
923 """bool: Link between the device and the host supports only some native atomic operations."""
924 return bool( 2/v
925 self._get_cached_attribute( 2/v
926 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2/v
927 )
928 )
931class Device:
932 """Represent a GPU and act as an entry point for cuda.core features.
934 This is a singleton object that helps ensure interoperability
935 across multiple libraries imported in the process to both see
936 and use the same GPU device.
938 While acting as the entry point, many other CUDA resources can be
939 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
940 resource created through this device, will continue to refer to
941 this device's context.
943 Newly returned :obj:`~_device.Device` objects are thread-local singletons
944 for a specified device.
946 Note
947 ----
948 Will not initialize the GPU.
950 Parameters
951 ----------
952 device_id : int, optional
953 Device ordinal to return a :obj:`~_device.Device` object for.
954 Default value of `None` return the currently used device.
956 """
957 __slots__ = ("_device_id", "_memory_resource", "_has_inited", "_properties", "_uuid", "_context", "__weakref__")
959 def __new__(cls, device_id: Device | int | None = None):
960 if isinstance(device_id, Device): 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~q9Cvy!Cwy#CxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!oRC?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBSDoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT 7CXvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
961 return device_id 29C!C#C?vYx@v[v]v3k^v_v7oUy8oVy9o.l!oRCq r #o$os %o'o(o)o*o+o,o-o.o/o:ot ;o=ou Zx0xOvPvQv?o@ovAwAxAyAWejkEk;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{f(j`kSD{k3n4nHk_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkA7ClAmAH I
963 Device_ensure_cuda_initialized() 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
964 device_id = Device_resolve_device_id(device_id) 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
965 devices = Device_ensure_tls_devices(cls) 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
967 try: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
968 return devices[device_id] 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
969 except IndexError: 2LCMC
970 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2LCMC
972 def _check_context_initialized(self):
973 if not self._has_inited: 29B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoJeKeLeMeNeOePeQeReSeTeUeOo'B(B5BYnrAsAtAZnuAok$k%k)B'k(k)k*k+k,k9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMAgkyk-kzkAkBkCkDkhkDe@ySCTCUCVCWCXCYCZC-CTDUD4kQCir8BZx0xly0C?o@ovAwAxAyA*B+B,B-B.B/BKkLk6B:B1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZk]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk+yukoy0v1vVDWD.CXD/CYDZD:C;C0D1D2D=C3D?C@C[C]C^C_C`C{C|C4D}C~CaDbD5DcDdD6D7D8D9DeD!DfD#D$DgDhD%D'D(DiD)DjDkDlDmDnDoDpDqDrD*DsDtDuDvD+DwDxD,D-D.D/DyD:DzD;D=DADBD?D@D[DCD]DDDEDFDGDHDIDJDKDLD^DMDNDODPD_DQDRD`D{DjkpkEkFk0kYyqkwf8CCj5nGmHmIm7nDj8nEj9nJmKmLm!nxfyf8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V MmNm1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,n%e)jOjPjQj*jzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(m6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nRj]n)m*m+m^nMfNf@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ,m-m#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aobocoqjumBlClDlvmOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knln)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokoloo p 1jmomnnnonno2joopnqnrnpo3jqosntnunro4jsovnwnxnto5juoynznAnvo6jwoBnCnDnxo7jyoEnFnGnzo8jAoHnInJnBoaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCqCJBrCsC
974 raise CUDAError(
975 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
976 )
979 @classmethod
980 def get_all_devices(cls):
981 """
982 Query the available device instances.
984 Returns
985 -------
986 tuple of Device
987 A tuple containing instances of available devices.
988 """
989 from cuda.core import system 2IwtCuCvCOA`v*yxCyCNw_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjA
990 total = system.get_num_devices() 2IwtCuCvCOA`v*yxCyCNw_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjA
991 return tuple(cls(device_id) for device_id in range(total)) 2IwtCuCvCOA`v*yxCyCNw_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjA
993 def to_system_device(self) -> 'cuda.core.system.Device':
994 """
995 Get the corresponding :class:`cuda.core.system.Device` (which is used
996 for NVIDIA Machine Library (NVML) access) for this
997 :class:`cuda.core.Device` (which is used for CUDA access).
999 The devices are mapped to one another by their UUID.
1001 Returns
1002 -------
1003 cuda.core.system.Device
1004 The corresponding system-level device instance used for NVML access.
1005 """
1006 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2%v
1008 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2%v
1009 raise RuntimeError(
1010 "cuda.core.system.Device requires cuda_bindings 13.1.2+ or 12.9.6+"
1011 )
1013 from cuda.core.system import Device as SystemDevice 2%v
1014 return SystemDevice(uuid=self.uuid) 2%v
1016 @property
1017 def device_id(self) -> int:
1018 """Return device ordinal."""
1019 return self._device_id 2[o]o'eXe(eYe)eZe*e0e+e1e,e2exmymok9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMABm7o1CUy8oVyCm9o2C.l!oRCDeq kkr #o$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oDm:o3C4Ct 5CEm;o6C4k=oQCiru Zx0xlyOvdg(yPvFmQv?o@ovAwAxAyA`vPoKkLk*ymyzAAA0v1vHwWejkwC.k/kEkFk;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{f(j`kSD{kGk3n4nHk}k~kzCACwfjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAv_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkA7ClAmACjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj0o1oH I 1j2j3j4j5j6j7j8jfz}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxgyggz
1021 @property
1022 def pci_bus_id(self) -> str:
1023 """Return a PCI Bus Id string for this device."""
1024 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2OAzA%v
1025 return bus_id[:12].decode() 2OAzA%v
1027 def can_access_peer(self, peer: Device | int) -> bool:
1028 """Check if this device can access memory from the specified peer device.
1030 Queries whether peer-to-peer memory access is supported between this
1031 device and the specified peer device.
1033 Parameters
1034 ----------
1035 peer : Device | int
1036 The peer device to check accessibility to. Can be a Device object or device ID.
1037 """
1038 peer = Device(peer)
1039 cdef int d1 = <int> self.device_id
1040 cdef int d2 = <int> peer.device_id
1041 if d1 == d2:
1042 return True
1043 cdef int value = 0
1044 with nogil:
1045 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1046 return bool(value)
1048 @property
1049 def uuid(self) -> str:
1050 """Return a UUID for the device.
1052 Returns 16-octets identifying the device. If the device is in
1053 MIG mode, returns its MIG UUID which uniquely identifies the
1054 subscribed MIG compute instance.
1056 Note
1057 ----
1058 MIG UUID is only returned when device is in MIG mode and the
1059 driver is older than CUDA 11.4.
1061 The UUID is cached after first access to avoid repeated CUDA API calls.
1063 """
1064 cdef cydriver.CUuuid uuid
1065 cdef cydriver.CUdevice dev
1066 cdef bytes uuid_b
1067 cdef str uuid_hex
1069 if self._uuid is None: 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvOAhz)yizjz%vAA@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZvMkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1070 dev = self._device_id 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1071 with nogil: 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1072 IF CUDA_CORE_BUILD_MAJOR == 12:
1073 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1074 ELSE: # 13.0+
1075 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1076 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1077 uuid_hex = uuid_b.hex() 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1078 # 8-4-4-4-12
1079 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2?fq r s t u dghz)yizjz%v@f[fsl]f^f_f`f{f|f}f~f'jagbgcg(jl rkskT MkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1080 return self._uuid 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvOAhz)yizjz%vAA@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZvMkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1082 @property
1083 def name(self) -> str:
1084 """Return the device name."""
1085 # Use 256 characters to be consistent with CUDA Runtime
1086 cdef int LENGTH = 256 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1087 cdef bytes name = bytes(LENGTH) 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1088 cdef char* name_ptr = name 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1089 cdef cydriver.CUdevice this_dev = self._device_id 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1090 with nogil: 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1091 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1092 name = name.split(b"\0")[0] 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1093 return name.decode() 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxmyWk
1095 @property
1096 def properties(self) -> DeviceProperties:
1097 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1098 if self._properties is None: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq @y9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPoHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
1099 self._properties = DeviceProperties._init(self._device_id) 2a vk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOoNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kgkyk-kzkAkBkCkDkhkq r s t u HlsjikhjijtjujvjjjkjwjxjyjzjljmjAjJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eWejkIl.kJlKl/k:kLlMlpkEkFk0k;k@f=k[f?k@k]f[k^f]k_f^k`f_k{fNl2v3vOl4vPl5vQl6vRl7vSl8v9vTl|fUl}fVlWl~fXlagYlbgZlcg0l`k1loh{k|k2lqkl 3l!vrksk#vGkHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT ph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|d}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
1101 return self._properties 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]oPwQwRwSwTwzgAgBgCgDgEgUwCoDoEoFo6k2o3o7k8k9k!k#kGoHoIoJoKoLoMoNo4oVwWwXwYwZw0wKnLn'eXe2dFgJeKeGgwdHgIgJgKgLg(eYe3dMgLeMeNgxdOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gyd7g8g9g!g#g*e0e5d$gPeQe%gzd'g(g)g*g+g+e1e6d,gReSe-gAd.g/g:g;g=g,e2e7d?gTeUe@gBd[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnh5o1w2wMn6oOo{vNnOnPnQnRnSnTnUnVnWnXnYnZnxmymok$k%k0n'k(k)k*k+k,kvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyPyQyRygkyk-kzkAkBkCkDkhk7oal8obl9ocl!o?fDeq @y9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWv2nPoHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQoHwWejkIl.kVxJlKl/k:kLlMlpkEkFk0k;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWxoh{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcT XvYvSyZvph8dqhrhHc9dshthIcJcuh!dvhwhKc#dxhyhLcCdxfyfzhAhBhChDdDhEhFhGh8 f 9 ! b g # $ c U V $d%d'd(d)dHh*dIhJh+dKhLh1f% 2f3fK ' 4f5fL Eem FeGej n HeIek MhEdzfAfNhOhPhQhFdRhShThUhBfW CfDfv X EfFfw GdGfHfVhWhXhYhZh0h1h2h,d3h4h-d5h6h( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h9hWc@d!h#hXcLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h=h]d?h@h6f= 7f8fM ? 9f!fN [hNd]h^h9cOd_h`h!cPdMfNf{h|h}h~hQdaibicidi@ h [ ] d i ^ _ e 0 1 ^d_d`d{d|dTy}deifi~dgihi#f` $f%fO { 'f(fP .f#c/f:f2 $c;f=f3 iiRdOfPfjikilimiSdnioipiqiQf4 RfSfB 5 TfUfC TdVfWfrisitiuiviwixiyiaeziAibeBiCi| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDiheEiFi:cieGiHi;cYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiVikeWiXi)fhb*f+fQ ib,f-fR H I o p ~cadYileZi0ibdme1i2icdddedfd3i0d4i5igd1d6i7ihd8ine9i!iidoe#i$ijd%ipe'i(ikdqe)i*ild+ire,i-imdse.i/ind:ite;i=iodue?i@ipd[ive]i^iqdwe_i`irdsd{ixe|i}itdye~iajudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS /e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvf
1103 @property
1104 def compute_capability(self) -> ComputeCapability:
1105 """Return a named tuple with 2 fields: major and minor."""
1106 cdef DeviceProperties prop = self.properties 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkDe@y2nPoJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^btB_buB`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS zeAeBeCe
1107 if "compute_capability" in prop._cache: 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkDe@y2nPoJ 2kZkBjIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^btB_buB`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS zeAeBeCe
1108 return prop._cache["compute_capability"] 2a Xx?vYx@v[v]v3k^v_vJwKwLwDe@y2nZkIk6A+y1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^btB_buB`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcvBqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcHcIcJcKcLcb c K L j k v w ( McNc) x y * OcPcQcRcSc+ , TcUcVcHdWcXc- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8cM N Nd9cOd!cd e O P 2 3 B C | %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd:c;ccb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cQ R ~cadbdcdddedfd0dgd1dhdidjdkdldmdndodpdqdrdsdtdudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS
1109 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPoJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe
1110 prop._cache["compute_capability"] = cc 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPoJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe
1111 return cc 2a $vvk+j,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfk6k2o3o7k8k9k!k#k4oKnLn2dwd3dxd4dyd5dzd6dAd7dBd5oMn6o{vNnOnPnQnRnSnTnUnVnWnXnxmymok$k%k0n'k(k)k*k+k,k3kgkyk-kzkAkBkCkDkhkDe2nPoJ 2kZkBj1njbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e7e8e9e!e#e$eS zeAeBeCe
1113 @property
1114 def arch(self) -> str:
1115 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1116 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a ?vYx@v[v]v3k^v_vJwKwLw2nZk+yCAnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb4l}kTb~kUbVbWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGcHcIcJcKcLcb c K L j k v w ( McNc) x y * OcPcQcRcSc+ , TcUcVcWcXc- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8cM N 9c!cd e O P 2 3 B C | %c'c} D E ~ (c)c*c+c,cabbb-c.c/c:c;ccb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cQ R ~cadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS
1118 @property
1119 def context(self) -> Context:
1120 """Return the :obj:`~_context.Context` associated with this device.
1122 Note
1123 ----
1124 Device must be initialized.
1126 """
1127 self._check_context_initialized() 25n9n1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,n)jvltm]n#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aobocoumElwmmoooqosouowoyoAo
1128 return self._context 25n9n1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,n)jvltm]n#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aobocoumElwmmoooqosouowoyoAo
1130 @property
1131 def memory_resource(self) -> MemoryResource:
1132 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1133 cdef int attr, device_id
1134 if self._memory_resource is None: 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyggz
1135 # If the device is in TCC mode, or does not support memory pools for some other reason,
1136 # use the SynchronousMemoryResource which does not use memory pools.
1137 device_id = self._device_id 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz
1138 with nogil: 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz
1139 HANDLE_RETURN( 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz
1140 cydriver.cuDeviceGetAttribute( 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz
1141 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1142 )
1143 )
1144 if attr == 1: 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz
1145 from cuda.core._memory import DeviceMemoryResource 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz
1146 self._memory_resource = DeviceMemoryResource(self._device_id) 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyggz
1147 else:
1148 from cuda.core._memory._legacy import _SynchronousMemoryResource
1149 self._memory_resource = _SynchronousMemoryResource(self._device_id)
1151 return self._memory_resource 2KkLk0v1vwfCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8jegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyggz
1153 @memory_resource.setter
1154 def memory_resource(self, mr):
1155 from cuda.core._memory import MemoryResource
1156 assert_type(mr, MemoryResource)
1157 self._memory_resource = mr
1159 @property
1160 def default_stream(self) -> Stream:
1161 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1163 The type of default stream returned depends on if the environment
1164 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1166 If set, returns a per-thread default stream. Otherwise returns
1167 the legacy stream.
1169 """
1170 return default_stream() 21x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xBC
1172 def __int__(self):
1173 """Return device_id."""
1174 return self._device_id 2'C(C)CKkLk
1176 def __repr__(self):
1177 return f"<Device {self._device_id} ({self.name})>" 2Bm1CUyVyCm2C.lRCDe@ySCTCUCVCWCXCYCZCkkCCDm3C4C5CEm6C4kQCir8BZx0xly0C(y$CFm%CUxWk
1179 def __hash__(self) -> int:
1180 return hash(self.uuid) 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvOvdgPvzmQvAmRvSvTvUvVvWvhz)yizjz@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZvMkEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkH I o p XkYkmknk
1182 def __eq__(self, other) -> bool:
1183 if not isinstance(other, Device): 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvRvSvTvUvVvWvJC)yKCNC@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZv6n.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoH I o p mknkJB
1184 return NotImplemented 2NC6n.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoJB
1185 return self._device_id == other._device_id 27oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvr !j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orlu %jMvNvRvSvTvUvVvWvJC)yKC@f[fsl]f^f_f`f{f|f}f|o~f'jagbgcg(jl rkskT XvYvZv6nH I o p mknk
1187 def __reduce__(self):
1188 return Device, (self.device_id,) 2Bm1CUyVyCm2C.lRCDekkDCECFCGCHCICDm3C4C5CEm6C4kQCirZx0xly(yFm?o@ovAwAxAyA0o1o
1190 def set_current(self, ctx: Context = None) -> Context | None:
1191 """Set device to be used for GPU executions.
1193 Initializes CUDA and sets the calling thread to a valid CUDA
1194 context. By default the primary context is used, but optional `ctx`
1195 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1197 Providing a `ctx` causes the previous set context to be popped and returned.
1199 Parameters
1200 ----------
1201 ctx : :obj:`~_context.Context`, optional
1202 Optional context to push onto this device's current thread stack.
1204 Returns
1205 -------
1206 :obj:`~_context.Context`, optional
1207 Popped context.
1209 Examples
1210 --------
1211 Acts as an entry point of this object. Users always start a code by
1212 calling this method, e.g.
1214 >>> from cuda.core import Device
1215 >>> dev0 = Device(0)
1216 >>> dev0.set_current()
1217 >>> # ... do work on device 0 ...
1219 """
1220 cdef ContextHandle h_context
1221 cdef cydriver.CUcontext prev_ctx, curr_ctx
1223 if ctx is not None: 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1224 # TODO: revisit once Context is cythonized
1225 assert_type(ctx, Context)
1226 if ctx._device_id != self._device_id:
1227 raise RuntimeError(
1228 "the provided context was created on the device with"
1229 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1230 )
1231 # prev_ctx is the previous context
1232 curr_ctx = as_cu(ctx._h_context)
1233 prev_ctx = NULL
1234 with nogil:
1235 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx))
1236 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx))
1237 self._has_inited = True
1238 self._context = ctx # Store owning context reference
1239 if prev_ctx != NULL:
1240 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1241 else:
1242 # use primary ctx
1243 h_context = get_primary_context(self._device_id) 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1244 if h_context.get() == NULL: 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1245 raise ValueError("Cannot set NULL context as current")
1246 with nogil: 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1247 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1248 self._has_inited = True 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1249 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpFAxpypzpApBpCpDpEpFpGpHpIpJpKpGALpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRyarbrcrNAdrerfrgrhr7oal8obl9ocl!o?fq 9jBvCvDvEvFvGvHvIvJvKvLvkkr CC!j#odl$os %o'o(o)o*o+o,o-o.o/oelflglhl#jiljlklllmlnlol:oplt $j;oql=orliru 8B%jMvNvOvdgPvzmQvAmRvSvTvUvVvWvjrkrlrmrPAnrQAKkLkRASATAUAVAWAXA*yYAZAUxWy0A1A1kJ lk2Aty3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezBjtknyIkCr5A7A8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%A'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJr;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|AOr^o}APrOlQr~APlRraBQlbBSrRlTrUrSlcBVr_odBeBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l7r8r9rsBGk3n4nHkVe!r#rTb$rUbVbWb%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqcrcsctcucvcwcxcJkyczcAcBcCcDcEcFcGckAT 7CXvlAYv8CSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS nAFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYufzZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1251 def create_context(self, options: ContextOptions = None) -> Context:
1252 """Create a new :obj:`~_context.Context` object.
1254 Note
1255 ----
1256 The newly context will not be set as current.
1258 Parameters
1259 ----------
1260 options : :obj:`~_context.ContextOptions`, optional
1261 Customizable dataclass for context creation options.
1263 Returns
1264 -------
1265 :obj:`~_context.Context`
1266 Newly created context object.
1268 """
1269 raise NotImplementedError("WIP: https://github.com/NVIDIA/cuda-python/issues/189")
1271 def create_stream(self, obj: IsStreamT | None = None, options: StreamOptions | None = None) -> Stream:
1272 """Create a Stream object.
1274 New stream objects can be created in two different ways:
1276 1) Create a new CUDA stream with customizable ``options``.
1277 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1279 Option (2) internally holds a reference to the foreign object
1280 such that the lifetime is managed.
1282 Note
1283 ----
1284 Device must be initialized.
1286 Parameters
1287 ----------
1288 obj : :obj:`~_stream.IsStreamT`, optional
1289 Any object supporting the ``__cuda_stream__`` protocol.
1290 options : :obj:`~_stream.StreamOptions`, optional
1291 Customizable dataclass for stream creation options.
1293 Returns
1294 -------
1295 :obj:`~_stream.Stream`
1296 Newly created stream object.
1298 """
1299 self._check_context_initialized() 29B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoOo'B(BsAtAok$k%k)B'k(k)k*k+k,k9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMAgkyk-kzkAkBkCkDkhkDe@ySCTCUCVCWCXCYCZC-CTDUD4kQCir8BZx0xly0C?o@ovAwAxAyA*B+B,B-B.B/B:B1kJ lk;B=B?B@B[B]B2k^B_B`B{B|B}B~BZk]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk+yukoyVDWD.CXD/CYDZD:C;C0D1D2D=C3D?C@C[C]C^C_C`C{C|C4D}C~CaDbD5DcDdD6D7D8D9DeD!DfD#D$DgDhD%D'D(DiD)DjDkDlDmDnDoDpDqDrD*DsDtDuDvD+DwDxD,D-D.D/DyD:DzD;D=DADBD?D@D[DCD]DDDEDFDGDHDIDJDKDLD^DMDNDODPD_DQDRD`D{DjkpkYyqkwf8C7n8n!n*j6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[n^nvm)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokoloo p noporotovoxozoBoaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCqCJBrCsC
1300 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 29B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoOo'B(BsAtAok$k%k)B'k(k)k*k+k,k9C!C#C*C+C,C?vYx@v[v]v3k^v_vJwKwLw'C(C)CKALAMAgkyk-kzkAkBkCkDkhkDe@ySCTCUCVCWCXCYCZC-CTDUD4kQCir8BZx0xly0C?o@ovAwAxAyA*B+B,B-B.B/B:B1kJ lk;B=B?B@B[B]B2k^B_B`B{B|B}B~BZk]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk+yukoyVDWD.CXD/CYDZD:C;C0D1D2D=C3D?C@C[C]C^C_C`C{C|C4D}C~CaDbD5DcDdD6D7D8D9DeD!DfD#D$DgDhD%D'D(DiD)DjDkDlDmDnDoDpDqDrD*DsDtDuDvD+DwDxD,D-D.D/DyD:DzD;D=DADBD?D@D[DCD]DDDEDFDGDHDIDJDKDLD^DMDNDODPD_DQDRD`D{DjkpkYyqkwf8C7n8n!n*j6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[n^nvm)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokoloo p noporotovoxozoBoaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCqCJBrCsC
1302 def create_event(self, options: EventOptions | None = None) -> Event:
1303 """Create an Event object without recording it to a Stream.
1305 Note
1306 ----
1307 Device must be initialized.
1309 Parameters
1310 ----------
1311 options : :obj:`EventOptions`, optional
1312 Customizable dataclass for event creation options.
1314 Returns
1315 -------
1316 :obj:`~_event.Event`
1317 Newly created event object.
1319 """
1320 self._check_context_initialized() 2qAJeKeLeMeNeOePeQeReSeTeUe5BYnrAsAtAZnuAok-C6Blk7BtyBAGmHmImJmKmLmxfyfbjcjU V MmNmtlulOjPjQjzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(mwlxlyl)m*m+mMfNfejfj0 1 ,m-mzlAlBlClDlOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knlnuyFlGlmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJn
1321 cdef Context ctx = self._context 2qAJeKeLeMeNeOePeQeReSeTeUe5BYnrAsAtAZnuAok-C6Blk7BtyBAGmHmImJmKmLmxfyfbjcjU V MmNmtlulOjPjQjzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(mwlxlyl)m*m+mMfNfejfj0 1 ,m-mzlAlBlClDlOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knlnuyFlGlmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJn
1322 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2qAJeKeLeMeNeOePeQeReSeTeUe5BYnrAsAtAZnuAok-C6Blk7BtyBAGmHmImJmKmLmxfyfbjcjU V MmNmtlulOjPjQjzfAfBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGfHf!m#mx y Y Z $m%mIfJfKfLfz A 'm(mwlxlyl)m*m+mMfNfejfj0 1 ,m-mzlAlBlClDlOfPfQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnVfWfgnhnD E 6 7 injnXfYfZf0fF G knlnuyFlGlmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJn
1324 def allocate(self, size, stream: Stream | GraphBuilder | None = None) -> Buffer:
1325 """Allocate device memory from a specified stream.
1327 Allocates device memory of `size` bytes on the specified `stream`
1328 using the memory resource currently associated with this Device.
1330 Parameter `stream` is optional, using a default stream by default.
1332 Note
1333 ----
1334 Device must be initialized.
1336 Parameters
1337 ----------
1338 size : int
1339 Number of bytes to allocate.
1340 stream : :obj:`~_stream.Stream`, optional
1341 The stream establishing the stream ordering semantic.
1342 Default value of `None` uses default stream.
1344 Returns
1345 -------
1346 :obj:`~_memory.Buffer`
1347 Newly created buffer object.
1349 """
1350 self._check_context_initialized() 2KkLk0v1vCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8j
1351 return self.memory_resource.allocate(size, stream) 2KkLk0v1vCjDjEj8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjnj%edjojRj@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0jpjqjgjrj1j2j3j4j5j6j7j8j
1353 def sync(self):
1354 """Synchronize the device.
1356 Note
1357 ----
1358 Device must be initialized.
1360 """
1361 self._check_context_initialized() 2?o@ovAwAxAyAKkLktknyukoy.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDjkpkEkFk0kqk
1362 handle_return(runtime.cudaDeviceSynchronize()) 2?o@ovAwAxAyAKkLktknyukoy.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDjkpkEkFk0kqk
1364 def create_graph_builder(self) -> "GraphBuilder":
1365 """Create a new :obj:`~graph.GraphBuilder` object.
1367 Returns
1368 -------
1369 :obj:`~graph.GraphBuilder`
1370 Newly created graph builder object.
1372 """
1373 from cuda.core.graph._graph_builder import GraphBuilder 2oAvk+jpA,jwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk9C!C#C*C+C,C?v@v[v]v^v_vJwKwLw'C(C)CKALAMAgkykzkAkBkCkDkhk
1375 self._check_context_initialized() 2oAvk+jpA,jwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk9C!C#C*C+C,C?v@v[v]v^v_vJwKwLw'C(C)CKALAMAgkykzkAkBkCkDkhk
1376 return GraphBuilder._init(stream=self.create_stream(), is_stream_owner=True) 2oAvk+jpA,jwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk9C!C#C*C+C,C?v@v[v]v^v_vJwKwLw'C(C)CKALAMAgkykzkAkBkCkDkhk
1379cdef inline int Device_ensure_cuda_initialized() except? -1:
1380 """Initialize CUDA driver and check version compatibility (once per process)."""
1381 global _is_cuInit
1382 if _is_cuInit is False: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1383 with _lock, nogil:
1384 HANDLE_RETURN(cydriver.cuInit(0))
1385 _is_cuInit = True
1386 try:
1387 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1388 except ImportError:
1389 pass
1390 else:
1391 warn_if_cuda_major_version_mismatch()
1392 return 0 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1395cdef inline int Device_resolve_device_id(device_id) except? -1:
1396 """Resolve device_id, defaulting to current device or 0."""
1397 cdef cydriver.CUdevice dev
1398 cdef cydriver.CUcontext ctx
1399 cdef cydriver.CUresult err
1400 if device_id is None: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1401 with nogil: 2a $v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B2nPoKkLk6B:BHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjtknyIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnzozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zsmYy{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbzCVbACWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS nABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg
1402 err = cydriver.cuCtxGetDevice(&dev) 2a $v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B2nPoKkLk6B:BHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjtknyIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnzozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zsmYy{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbzCVbACWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS nABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg
1403 if err == cydriver.CUresult.CUDA_SUCCESS: 2a $v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B2nPoKkLk6B:BHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lk7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjtknyIk1n6A+y1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnzozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zsmYy{k|k2lqkl 3l!vrksk#vGk3n4nHkVe4l}kTb~kUbzCVbACWbwfXb3e5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l4e*l+l,l-l5e6e,y7e8e-y9e.y/yDA:y!e#e$e;yEAS nABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg
1404 return int(dev) 2$v9B!BoAvk+jpA,j5kwkxk-j.j/j:j;j=j?j@j[j]j^j_j`j{j|jXx}j~jakbkckdkekfk[o]o#BCoDoEoFo6kqA$B%B7k8k9k!k#kGoHoIoJoKoLoMoNoKnLn'eXe2dJeKewd(eYe3dLeMexd)eZe4dNeOeyd*e0e5dPeQezd+e1e6dReSeAd,e2e7dTeUeBdMnOoNnOnPnQnRnSnTnUnVnWn'B(BXn5BYnrAsAtAZnuAxmymok$k%k0n)B'k(k)k*k+k,k?vYx@v[v]v3k^v_vJwKwLwgkyk-kzkAkBkCkDkhkalblcl?f9j!jdlelflglhl#jiljlklllmlnlolpl$jqlrl%jdgzmAm*B+B,B-B.B/B6B:B7BtyBA;B=B?B@B[B]B2k^B_B`B{B|B}B~BZkOCBjnyIk1n6A+y1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*x+x,x-x.x/x:x;x=x?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzoylzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]zHwjkwCIl.kVxJlKl/k:kLlMlpkEkFk0kPC;k@f=k[f?ksl@k]f[k^f]k_f^k`f_k{fNl2v^o3vOl4vPl5vQl6vRl7vSl8v_o9vTl|fUl}fVl|oWl~f`o'jXlagYlbgZlcg(j0l{o`k1lWx^zYy{k|k2lqkl 3l!vrksk#vGk3n4nHk4l}kTb~kUbzCVbACWbwfXb5l6l7l8l9l!l#l$l%l'lYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGc8dHc9dIcJc!dKc#dLcCdDdf b g c U V $d%d'd(d)d*d+d% K ' L m j n k EdFdW v X w Gd,d-d( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d?dWc@dXcLdMd- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c[d]d= M ? N Nd9cOd!cPdQdh d i e 0 1 ^d_d`d{d|d}d~d` O { P #c2 $c3 RdSd4 B 5 C Tdaebe| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegehe:cie;cYdZdcb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cjekehbQ ibR ~cadlebdmecdddedfd0dgd1dhdneidoejdpekdqeldremdsendteoduepdveqdwerdsdxetdyeudvd(l)l*l+l,l-lDAEAnABCaCHBbCcCdCeCIBfCgChCiCjCkClCmCnCoCpCfzqCJBrCsC/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCetfufvfZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y=y?y
1405 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1406 with nogil: 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg
1407 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg
1408 assert <void*>(ctx) == NULL 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg
1409 return 0 # cudart behavior 2a 2nPoKkLkHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxWymyzA%vAA1kJ lktkjbkblbmbuk/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemXyfmgmhmimjmkmlmmmnmompmqmrmWesml Ve3e4e5e6e,y7e8e-y9e.y/y:y!e#e$e;yS egfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg
1410 else:
1411 HANDLE_RETURN(err)
1412 elif device_id < 0: 2a }o~oapbp+jcpdp,jepfpgphp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQpRpSpTpCoUpDoVpEoWpFoXpYpZp0p1p2o2p3o3p4p5p6p7p8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqPq6oQqRqOoSq{vIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!qYn#qrA$q%q'qZn(quA)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarbrcrNAdrerfrgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`vjrkrlrmrPAnrQAKkLkRASAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAUxjz0ANC1A2ABA3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezIkCr5A7A8AnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQo0v1vDr!AEr#AFr$AHw%A'A(AGr)A*A+AHr,A-A.AIrJrKrLr/A:A;A=A?A@A[A]AMr^A_A`ANr{A|AOr}APrQr~ARraBbBSrTrUrcBVrdBeBfBgBhBiBWrjBXrkBlBmBYrZr0rnB1r2roBpBqB3r4rrBoh5r6r7r8r9rsBGkxCyCNw!r#rTb$rUbVbWbwf%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS FuGuHuHBIuJuKuLuMuIBNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1413 raise ValueError(f"device_id must be >= 0, got {device_id}")
1414 return device_id 2a }o~oapbp+jcpdp,jepfpgphp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQpRpSpTpCoUpDoVpEoWpFoXpYpZp0p1p2o2p3o3p4p5p6p7p8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqPq6oQqRqOoSq{vIATqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!qYn#qrA$q%q'qZn(quA)q*q+q,q-q.q/q:q;q=q?q@q[q]qJA^q_q`q{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarbrcrNAdrerfrgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`vjrkrlrmrPAnrQAKkLkRASAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAUxjz0ANC1A2ABA3Aorpr4AqrrrsrtrurvrwrxryrzrArBr]y^y_y`y{y|y}y~yazbzczdzezIkCr5A7A8AnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQo0v1vDr!AEr#AFr$AHw%A'A(AGr)A*A+AHr,A-A.AIrJrKrLr/A:A;A=A?A@A[A]AMr^A_A`ANr{A|AOr}APrQr~ARraBbBSrTrUrcBVrdBeBfBgBhBiBWrjBXrkBlBmBYrZr0rnB1r2roBpBqB3r4rrBoh5r6r7r8r9rsBGkxCyCNw!r#rTb$rUbVbWbwf%rXb'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcOwgchcicjckclcmcncocpcqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t$t%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiujukulumuCBnuoupuDBqurusutuuuvuwuxuEBFByuGBzuAuBuCuDuEuS FuGuHuHBIuJuKuLuMuIBNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1417cdef inline list Device_ensure_tls_devices(cls):
1418 """Ensure thread-local Device singletons exist, creating if needed."""
1419 cdef int total
1420 try: 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1421 return _tls.devices 2a $v9B}o!B~ooAapvkbp+jcppAdp,jep5kfpwkgpxkhp-jip.jjp/jkp:jlp;jmp=jnp?jop@jpp[jqp]jrp^jsp_jtp`jup{jvp|jwpXxFA}jxp~jypakzpbkApckBpdkCpekDpfkEp[oFp]oGpPwHpIpIwQwJpKpRwGASwLpTwMpzgAgBgNpCgDgEgUwOpPpQp#BRpSpTpCoUpDoVpEoWpFoXp6kYpqAZp$B0p%B1p2o2p3o3p7k4p8k5p9k6p!k7p#k8pGo9pHo!pIo#pJo$pKo%pLo'pMo(pNo)p4o*p+p,p-pVw.pWw/pXw:pYw;pZw=p0w?pKn@pLn[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gHApq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLq5oMq1wNq2wOqMnPq6oQqRqOoSq{vIANnTqOnUqPnVqQnWqRnXqSnYqZq0q1q2qTn3qUn4qVn5qWn6q'B7q(B8qXn9q5B!qYn#qrA$qsA%qtA'qZn(quA)qxm*qym+qok,q$k-q%k.q0n/q)B:q;q'k=q(k?q)k@q*k[q+k]qJA^q_q`q,k{q|q}q~qvywyxyyyzyAy?vByYxCy@vDy[vEy]vFy3kGy^vHy_vIyJwJyKwKyLwLyMyNyOyKAPyLAQyMARygkarykbr-kcrzkNAAkdrBkerCkfrDkgrhkhrBm7oalUy8oVyblCm9ocl.l!o?fDeq 9jBvCvDvEvFvGvHvIvJvKvLvkkr !j#odl$oDCs %oEC'o(oFC)o*oGC+o,oHC-o.oIC/oelflglhl#jiljlklllmlnlolDm:oplt $jEm;oql4k=orltCuCvCiru %jZxMv0xNvlyOvdg(yPvzmFmQvAm?oRv@oSvvATvwAUvxAVvyAWvOA`v*Bjr+Bkr,Blr-Bmr.BPA/BnrQA2nPoKkLk6BRA:BSAhzTAJCUA)yVAKCWAizXA*yLCYAMCZAHlsj3w4w5w|v'v}vpy6w[y7wik~v8w9w!w#w(v)v$w%waw'w(whj)w*v*w+w,w-wbw+vij,vcwdwew.wfwgw-v/w.v:w;wqy=w?w@w[w]w^w_w`w{w|w}w~waxbxhwcxiwjwtjujkwdxexfxlwmwgxhxixjxkxnwowlxpwmxvjqwnxoxpxqxrwswrxsxtxuxjjtwvxwxuwxxvwyxwwkjxwzxwjAxBxryCxDxxjyjExFxGxHxzj/vIx:vJxKxLxywzwsyljAwMxNxmjOxPx;vQxAjRx=vSxTxUxWyjz0ANC1AmyzA%vAA1kJ lk7B2AtyBA3A;Bor=Bpr?B4A@Bqr[Brr]Bsr2ktr^Bur_Bvr`Bwr{Bxr|Byr}Bzr~BArZkBrOC]y^y_y`y{y|y}y~yazbzczdzezBjtknyIk1nCr5A6A7A+y8A1x2x3x4x5x6x7xjb8x9x!x#x$x%x'x(x)x*xkb+x,x-x.x/x:xlb;x=xmb?xCAnbobpb9AqbrbsbtbubvbwbxbybzbAbBbCbDbMwEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.eQokzukoy/llzmz:lnz0v1vDr!AEr#AFr$Aozpzqzrzsz;l=ltzuz?l@lvzwzxzyz[lzzAzBzCz]lDz^lEz_lFzGz`lHzIz{lJzKz|l}lLzMzNzOz~lPzQzRzSzTzUzambmcmVzdmWzXzemXyfmYzZzgm0z1zhm2z3zim4z5z6z7z8z9z!z#zjm$zkm%zlm'z(z)zmm*z+z,z-z.znm/zom:z;zpmqm=zrm?z@z[z]zHwWejk%AwC'AIl.kVx(AJlGrKl)A/k*A:k+ALlHrMl,Apk-AEk.AFkIr0kJrPC;kKr@fLr=k/A[f:A?k;Asl=A@k?A]f@A[k[A^f]A]kMr_f^A^k_A`f`A_kNr{f{ANl|A2vOr^o}A3vPrOlQr4v~APlRr5vaBQlbB6vSrRlTr7vUrSlcB8vVr_odB9veBTlfB|fgBUlhB}fiBVlWr|ojBWlXr~fkB`olB'jmBXlYragZrYl0rbgnBZl1rcg2r(joB0lpB{oqB`k3r1l4rWxrBoh^zsmYy{k|k2l5rqk6rl 3l!v7rrk8rsk9r#vsBGk3n4nHkVexCyCNw4l!r}k#rTb~k$rUbzCVbACWbwf%rXb3e5l'r6l(r7l)r8l*r9l+r!l,r#l-r$l.r%l/r'l:rYbZb0b1b2b3b4b5b6bBw7bCw8bDw9bEw!bFw#bGw$bjv%bkv'blv(bmv)bnv*bov+bpv,bqv-brv.bsv/btv:buv;bvv=bwv?bxv@byv[bzv]bAv^btB_buB`b@x{b[x|b]x}b^x~b_xac`xbc{xcc|xdc}xec~xfcayOwbygccyhcdyiceyjcfykcgylchymciyncjyockypcvBqc_zrc`zsc{ztc|zuc}zvc~zwcaAxcbAJkcAycdAzceAAcfABcgACchADciAEcjAFcGckAT XvlAYvSymAZvphCj8d;r5n6nqhGmHmImrh=rwB?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?dxB8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|dTy}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fuyFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t(l!t)l#t4e*l$t+l%t'tyB(t)t*tzB+t,tAB-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~tBBaubucudueufuguhuiuju,lku-llu5e6e,ymuCBnuoupuDBqurusutuuuvuwuxu7e8e-y9e.y/yDAEB:y!e#e$e;yEAFByuGBzuAuBuCuDuEuS nAFuBCGuaCHuHBIubCJucCKudCLueCMuIBNufCOugCPuhCQuiCRujCSukCTulCUumCVunCWuoCXupCYufzZuqC0uJB1urC2usC3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'uKB(u)uLBMB*u+u,uNB-uOB.u/u:uPB;u=uegZyfg0ygghgig1y2yjgkg3y4y5ylg6ymg7yngogpg8y9yqg!y#y$y%yrg'ysgtgugvgwgxg=y?yyg?u@uQBgzRBSBTB[uUB]uVB^u_u`u{u|uWBXBYBZB}u0B~u1B2Bavbvcvdv3Bevfvgvhviv4B
1422 except AttributeError: 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1423 with nogil: 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1424 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1425 devices = _tls.devices = [] 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1426 for dev_id in range(total): 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1427 device = super(Device, cls).__new__(cls) 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1428 device._device_id = dev_id 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1429 device._memory_resource = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1430 device._has_inited = False 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1431 device._properties = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1432 device._uuid = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1433 device._context = None 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1434 devices.append(device) 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv
1435 return devices 2a }o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpIwJpKpLpMpzgAgBgNpCgDgEgOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p'eXe2dFgJeKeGg]p^p_p`pwdHgIgJgKgLg{p|p(eYe3dMgLeMeNg}p~paqbqxdOgPgQgRgSgcqdqTgUgVgeqWgXgYgZg0g1g2g3g4g)eZe4d5gNeOe6gfqgqhqiqyd7g8g9g!g#gjqkq*e0e5d$gPeQe%glqmqnqoqzd'g(g)g*g+gpq+e1e6d,gReSe-gqqrqsqtqAd.g/g:g;g=guqvq,e2e7d?gTeUe@gwqxqyqzqBd[g]g^g_g`gAqBq{g|g}g~gahbhchdhehfhghhhCqihjhkhlhmhnhDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrBmCm.lDeq kkr s Dmt Em4ku Fm?o@o`vjrkrlrmrnrHlsjikhjijtjujvjjjkjwjxjyjzjljmjAj1kJ lkorprqrrrsrtrurvrwrxryrzrArBrtkCrjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb-e.euk/l:lDrErFr;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmWeGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4rohsm5r6rl 7r8r9rVeNw!r#rTb$rUbVbWb%rXb3e'r(r)r*r+r,r-r.r/r:rYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcT phCj8d;r5n6nqhGmHmImrh=r?r@rHc9dshthIc[r7n]r^rDjJc8nuhEj!d_r9nMkvhJmKmLmwh`r{r|r}rKc#dxhyhLc~r!nasbsCdxfyfzhAhBhChDdDhEhFhGh8 f Fj9 bjcj! GjHjIjJjb g Kj# $ c LjMjNjU V $d%d'd(d)dHh*dIhMmNmJhcsdses+dKhLhfsgshs1fnj% #n2ftlul3f$n%n'n(nK ' )n4f5fL *n+n,nEe%em Nk)jFeOjPjQjGeOkPkQkRkj n SkHeIek Tk*jUkVkMhEdzfAfNhOhPhQhFdRhShThUhBfdjW OmvlCfPmQmDfRmSmTmUmv X VmEfFfw WmXmYmZm0m1m2m3m4m5m6m7m8m9mGdGfHfVhWhXhYhZh0h1h2h,dis3h!m#m4hjsksls-d5h6hmsnsospsqsrssstsusvswsxs( McNc) x y * OcPcQcRcSc+ , TcUcVcHdY Z Id.d/d:dJdKd;d=d7h?d8h$m%m9hyszsAsBsWc@d!h#hXcCsDsEsLdIfJf$h%h'h(h)hMdKfLf*h+h,h-h.h/h- YcZc. z A / 0c1c2c3c4c5c: ; 6c7c8c:h[d;h'm(m=hFsGsHs]d?h@hIsJs6foj= -ntm7fwlxlyl8f.n/n:n;nM ? =n9f!fN ?n@n[nKs[hRjNdLs]nMs]h)m*m+m^hNsOsPsQs9cOd_h`h!cRs^nSsTsPdMfNf{h|h}h~hQdaibicidi@ h Sj[ ejfj] TjUjVjWjd i Xj^ _ e YjZj0j0 1 ^d_d`d{d|d}dei,m-mfiUsVsWs~dgihiXsYsZs#fpj` _n$fzlAl%f`n{n|n}nO { ~n'f(fP aoboco.fqj#cRoum/fBlClDl:fSoToUoVo2 $cWo;f=f3 XovmYoZoiiRdOfPfjikilimiSdnioipiqiQfgj4 .mElRf/m:mSf;m=m?m@mB 5 [mTfUfC ]m^m_m`m{m|m}m~manbncndnenfnTdVfWfrisitiuiviwixiyiae0szignhnAi1s2s3sbeBiCi4s5s6s7s8s9s!s#s$s%s's(s| %c'c} D E ~ (c)c*c+c,cabbb-c.c/cUd6 7 VdcedeeeWdXdfegeDihe)sEiinjnFi*s+s,s-s:cieGiHi;c.s/s:sYdXfYfIiJiKiLiMiZdZf0fNiOiPiQiRiSicb=c?cdbF G eb@c[c]c^c_c`cfbgb{c|c}cTijeUiknlnVi;s=s?skeWiXi@s[s)frjhbdowm*fFlGl+feofogohoQ ibio,f-fR jokolo]s0o1oH I o p ~cadYi1jle^smoWkZimnnnon0i_s`s{s|sbdme1i2icddd}sedfd~satnobtct3i2j0ddtooet4ipnqnrn5iftgthtitgd1d6i7ihdjtpoktlt8i3jnemtqoXk9isntnun!intotptqtidoe#i$ijdrtrosttt%i4jpeutsoYk'ivnwnxn(ivtwtxtytkdqe)i*ildzttoAtBt+i5jreCtuomk,iynznAn-iDtEtFtGtmdse.i/indHtvoItJt:i6jteKtwonk;iBnCnDn=iLtMtNtOtodue?i@ipdPtxoQtRt[i7jveStyoTt]iEnFnGn^iUtVtWtXtqdwe_i`irdsdYtzoZt0t{i8jxe1tAo2t|iHnInJn}i3t4t5t6ttdye~iajudvd7tBo8t9t!t#t4e$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulu5e6emunuoupuqurusutuuuvuwuxu7e8e9e!e#e$eyuzuAuBuCuDuEuS FuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u/e:e;e=e?e@e[e]e^e_e`e{e|e}e~eafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsfzeAeBeCe4u5u6utfufvf7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=uegfggghgigjgkglgmgngogpgqgrgsgtgugvgwgxgyg?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhviv