Coverage for cuda / core / _device.pyx: 93.16%
453 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-22 01:37 +0000
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-22 01:37 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cpython
9from cuda.bindings cimport cydriver
10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN
11from libcpp.vector cimport vector
13import threading
15from cuda.core._context cimport Context
16from cuda.core._context import ContextOptions
17from cuda.core._device_resources cimport DeviceResources, SMResource, WorkqueueResource
18from cuda.core._event cimport Event as cyEvent
19from cuda.core._event import Event, EventOptions
20from cuda.core._memory._buffer cimport Buffer, MemoryResource
21from cuda.core._resource_handles cimport (
22 ContextHandle,
23 GreenCtxHandle,
24 create_context_handle_ref,
25 create_green_ctx_handle,
26 get_primary_context,
27 get_last_error,
28 as_cu,
29)
31from cuda.core._stream import IsStreamType, Stream, StreamOptions
32from cuda.core._utils.clear_error_support import assert_type
33from cuda.core._utils.cuda_utils import (
34 ComputeCapability,
35 CUDAError,
36 driver,
37 handle_return,
38 runtime,
39)
40from cuda.core._stream cimport default_stream
42# TODO: I prefer to type these as "cdef object" and avoid accessing them from within Python,
43# but it seems it is very convenient to expose them for testing purposes...
44_tls = threading.local()
45_lock = threading.Lock()
46cdef bint _is_cuInit = False
49cdef class DeviceProperties:
50 """
51 A class to query various attributes of a CUDA device.
53 Attributes are read-only and provide information about the device.
54 """
55 cdef:
56 int _handle
57 dict _cache
59 def __init__(self, *args, **kwargs):
60 raise RuntimeError("DeviceProperties cannot be instantiated directly. Please use Device APIs.") 2zF
62 @classmethod
63 def _init(cls, handle):
64 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
65 self._handle = handle 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
66 self._cache = {} 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
67 return self 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
69 cdef inline int _get_attribute(self, cydriver.CUdevice_attribute attr, default=0) except? -2:
70 """Retrieve the attribute value directly from the driver."""
71 cdef int val
72 cdef cydriver.CUresult err
73 with nogil: 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
74 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
75 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
76 return <int>default
77 HANDLE_RETURN(err) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
78 return val 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qe,zt AkBk%k( 8gP vpMpDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
80 cdef inline int _get_cached_attribute(self, attr, default=0) except? -2:
81 """Retrieve the attribute value, using cache if applicable."""
82 if attr not in self._cache: 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvzwzxzyzzzAzBz|k4hCzDzEzFzGzHzIzJzKzLz9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpDxExFxGx'wWw(wHxmkIx)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybycydyeyfygyhyiyqkoz2wjy3wrkkyly~waxbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
83 self._cache[attr] = self._get_attribute(attr, default) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm|k4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk Qet AkBk%k( 8gP vpMpDxExFxGx'wWw(wHxmkIx)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybycydyeyfygyhyiyqkoz2wjy3wrkkyly~waxbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6h7hNp8hOl9hql4gOp!hVmBwCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
84 return self._cache[attr] 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvzwzxzyzzzAzBz|k4hCzDzEzFzGzHzIzJzKzLz9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpDxExFxGx'wWw(wHxmkIx)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybycydyeyfygyhyiyqkoz2wjy3wrkkyly~waxbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_b`b{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
86 @property
87 def max_threads_per_block(self) -> int:
88 """int: Maximum number of threads per block."""
89 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2#xdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y
91 @property
92 def max_block_dim_x(self) -> int:
93 """int: Maximum block dimension X."""
94 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 21x
96 @property
97 def max_block_dim_y(self) -> int:
98 """int: Maximum block dimension Y."""
99 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 22x
101 @property
102 def max_block_dim_z(self) -> int:
103 """int: Maximum block dimension Z."""
104 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 23x
106 @property
107 def max_grid_dim_x(self) -> int:
108 """int: Maximum grid dimension X."""
109 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 25x~k
111 @property
112 def max_grid_dim_y(self) -> int:
113 """int: Maximum grid dimension Y."""
114 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 26x
116 @property
117 def max_grid_dim_z(self) -> int:
118 """int: Maximum grid dimension Z."""
119 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 27x
121 @property
122 def max_shared_memory_per_block(self) -> int:
123 """int: Maximum shared memory available per block in bytes."""
124 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2!xdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y
126 @property
127 def total_constant_memory(self) -> int:
128 """int: Memory available on device for constant variables in a CUDA C kernel in bytes."""
129 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2qy
131 @property
132 def warp_size(self) -> int:
133 """int: Warp size in threads."""
134 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2uy
136 @property
137 def max_pitch(self) -> int:
138 """int: Maximum pitch in bytes allowed by memory copies."""
139 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2mz
141 @property
142 def maximum_texture1d_width(self) -> int:
143 """int: Maximum 1D texture width."""
144 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2:x
146 @property
147 def maximum_texture1d_linear_width(self) -> int:
148 """int: Maximum width for a 1D texture bound to linear memory."""
149 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2/x
151 @property
152 def maximum_texture1d_mipmapped_width(self) -> int:
153 """int: Maximum mipmapped 1D texture width."""
154 return self._get_cached_attribute( 2]w
155 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2]w
156 )
158 @property
159 def maximum_texture2d_width(self) -> int:
160 """int: Maximum 2D texture width."""
161 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2_x
163 @property
164 def maximum_texture2d_height(self) -> int:
165 """int: Maximum 2D texture height."""
166 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2?x
168 @property
169 def maximum_texture2d_linear_width(self) -> int:
170 """int: Maximum width for a 2D texture bound to linear memory."""
171 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2^x
173 @property
174 def maximum_texture2d_linear_height(self) -> int:
175 """int: Maximum height for a 2D texture bound to linear memory."""
176 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2[x
178 @property
179 def maximum_texture2d_linear_pitch(self) -> int:
180 """int: Maximum pitch in bytes for a 2D texture bound to linear memory."""
181 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2]x
183 @property
184 def maximum_texture2d_mipmapped_width(self) -> int:
185 """int: Maximum mipmapped 2D texture width."""
186 return self._get_cached_attribute( 2`w
187 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2`w
188 )
190 @property
191 def maximum_texture2d_mipmapped_height(self) -> int:
192 """int: Maximum mipmapped 2D texture height."""
193 return self._get_cached_attribute( 2'j
194 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2'j
195 )
197 @property
198 def maximum_texture3d_width(self) -> int:
199 """int: Maximum 3D texture width."""
200 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2|x
202 @property
203 def maximum_texture3d_height(self) -> int:
204 """int: Maximum 3D texture height."""
205 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2{x
207 @property
208 def maximum_texture3d_depth(self) -> int:
209 """int: Maximum 3D texture depth."""
210 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2`x
212 @property
213 def maximum_texture3d_width_alternate(self) -> int:
214 """int: Alternate maximum 3D texture width, 0 if no alternate maximum 3D texture size is supported."""
215 return self._get_cached_attribute( 2|w
216 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 2|w
217 )
219 @property
220 def maximum_texture3d_height_alternate(self) -> int:
221 """int: Alternate maximum 3D texture height, 0 if no alternate maximum 3D texture size is supported."""
222 return self._get_cached_attribute( 2(j
223 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2(j
224 )
226 @property
227 def maximum_texture3d_depth_alternate(self) -> int:
228 """int: Alternate maximum 3D texture depth, 0 if no alternate maximum 3D texture size is supported."""
229 return self._get_cached_attribute( 2{w
230 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2{w
231 )
233 @property
234 def maximum_texturecubemap_width(self) -> int:
235 """int: Maximum cubemap texture width or height."""
236 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2}x
238 @property
239 def maximum_texture1d_layered_width(self) -> int:
240 """int: Maximum 1D layered texture width."""
241 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2.x
243 @property
244 def maximum_texture1d_layered_layers(self) -> int:
245 """int: Maximum layers in a 1D layered texture."""
246 return self._get_cached_attribute( 2[w
247 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2[w
248 )
250 @property
251 def maximum_texture2d_layered_width(self) -> int:
252 """int: Maximum 2D layered texture width."""
253 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2@x
255 @property
256 def maximum_texture2d_layered_height(self) -> int:
257 """int: Maximum 2D layered texture height."""
258 return self._get_cached_attribute( 2^w
259 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2^w
260 )
262 @property
263 def maximum_texture2d_layered_layers(self) -> int:
264 """int: Maximum layers in a 2D layered texture."""
265 return self._get_cached_attribute( 2_w
266 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2_w
267 )
269 @property
270 def maximum_texturecubemap_layered_width(self) -> int:
271 """int: Maximum cubemap layered texture width or height."""
272 return self._get_cached_attribute( 2}w
273 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2}w
274 )
276 @property
277 def maximum_texturecubemap_layered_layers(self) -> int:
278 """int: Maximum layers in a cubemap layered texture."""
279 return self._get_cached_attribute( 2)j
280 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2)j
281 )
283 @property
284 def maximum_surface1d_width(self) -> int:
285 """int: Maximum 1D surface width."""
286 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2'x
288 @property
289 def maximum_surface2d_width(self) -> int:
290 """int: Maximum 2D surface width."""
291 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2*x
293 @property
294 def maximum_surface2d_height(self) -> int:
295 """int: Maximum 2D surface height."""
296 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2(x
298 @property
299 def maximum_surface3d_width(self) -> int:
300 """int: Maximum 3D surface width."""
301 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2-x
303 @property
304 def maximum_surface3d_height(self) -> int:
305 """int: Maximum 3D surface height."""
306 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2,x
308 @property
309 def maximum_surface3d_depth(self) -> int:
310 """int: Maximum 3D surface depth."""
311 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2+x
313 @property
314 def maximum_surface1d_layered_width(self) -> int:
315 """int: Maximum 1D layered surface width."""
316 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2%x
318 @property
319 def maximum_surface1d_layered_layers(self) -> int:
320 """int: Maximum layers in a 1D layered surface."""
321 return self._get_cached_attribute( 2%j
322 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2%j
323 )
325 @property
326 def maximum_surface2d_layered_width(self) -> int:
327 """int: Maximum 2D layered surface width."""
328 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2)x
330 @property
331 def maximum_surface2d_layered_height(self) -> int:
332 """int: Maximum 2D layered surface height."""
333 return self._get_cached_attribute( 25y
334 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 25y
335 )
337 @property
338 def maximum_surface2d_layered_layers(self) -> int:
339 """int: Maximum layers in a 2D layered surface."""
340 return self._get_cached_attribute( 2=w
341 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2=w
342 )
344 @property
345 def maximum_surfacecubemap_width(self) -> int:
346 """int: Maximum cubemap surface width."""
347 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2pk
349 @property
350 def maximum_surfacecubemap_layered_width(self) -> int:
351 """int: Maximum cubemap layered surface width."""
352 return self._get_cached_attribute( 2@w
353 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2@w
354 )
356 @property
357 def maximum_surfacecubemap_layered_layers(self) -> int:
358 """int: Maximum layers in a cubemap layered surface."""
359 return self._get_cached_attribute( 2?w
360 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2?w
361 )
363 @property
364 def max_registers_per_block(self) -> int:
365 """int: Maximum number of 32-bit registers available to a thread block."""
366 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 29x
368 @property
369 def clock_rate(self) -> int:
370 """int: Typical clock frequency in kilohertz."""
371 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2Qe,zizG Il}k
373 @property
374 def texture_alignment(self) -> int:
375 """int: Alignment requirement for textures."""
376 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2oy
378 @property
379 def texture_pitch_alignment(self) -> int:
380 """int: Pitch alignment requirement for textures."""
381 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2py
383 @property
384 def gpu_overlap(self) -> bool:
385 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead."""
386 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 2Rx
388 @property
389 def multiprocessor_count(self) -> int:
390 """int: Number of multiprocessors on device."""
391 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2iy~k
393 @property
394 def kernel_exec_timeout(self) -> bool:
395 """bool: Specifies whether there is a run time limit on kernels."""
396 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2lz
398 @property
399 def integrated(self) -> bool:
400 """bool: Device is integrated with host memory."""
401 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2kz
403 @property
404 def can_map_host_memory(self) -> bool:
405 """bool: Device can map host memory into CUDA address space."""
406 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2Fx
408 @property
409 def compute_mode(self) -> int:
410 """int: Compute mode (See CUcomputemode for details)."""
411 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2jz
413 @property
414 def concurrent_kernels(self) -> bool:
415 """bool: Device can possibly execute multiple kernels concurrently."""
416 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2Jx
418 @property
419 def ecc_enabled(self) -> bool:
420 """bool: Device has ECC support enabled."""
421 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2Mx
423 @property
424 def pci_bus_id(self) -> int:
425 """int: PCI bus ID of the device."""
426 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2rk
428 @property
429 def pci_device_id(self) -> int:
430 """int: PCI device ID of the device."""
431 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2ky
433 @property
434 def pci_domain_id(self) -> int:
435 """int: PCI domain ID of the device."""
436 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2ly
438 @property
439 def tcc_driver(self) -> bool:
440 """bool: Device is using TCC driver model."""
441 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2ny
443 @property
444 def memory_clock_rate(self) -> int:
445 """int: Peak memory clock frequency in kilohertz."""
446 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2nz
448 @property
449 def global_memory_bus_width(self) -> int:
450 """int: Global memory bus width in bits."""
451 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 2Ox
453 @property
454 def l2_cache_size(self) -> int:
455 """int: Size of L2 cache in bytes."""
456 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 2Xx
458 @property
459 def max_threads_per_multiprocessor(self) -> int:
460 """int: Maximum resident threads per multiprocessor."""
461 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2$xdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw
463 @property
464 def unified_addressing(self) -> bool:
465 """bool: Device shares a unified address space with the host."""
466 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a ry
468 @property
469 def compute_capability_major(self) -> int:
470 """int: Major compute capability version number."""
471 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpmkG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe
473 @property
474 def compute_capability_minor(self) -> int:
475 """int: Minor compute capability version number."""
476 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpIxG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe
478 @property
479 def global_l1_cache_supported(self) -> bool:
480 """bool: Device supports caching globals in L1."""
481 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 2Nx
483 @property
484 def local_l1_cache_supported(self) -> bool:
485 """bool: Device supports caching locals in L1."""
486 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 2Yx
488 @property
489 def max_shared_memory_per_multiprocessor(self) -> int:
490 """int: Maximum shared memory available per multiprocessor in bytes."""
491 return self._get_cached_attribute( 2$jdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw
492 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2$jdxexfxgxhxixjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw
493 )
495 @property
496 def max_registers_per_multiprocessor(self) -> int:
497 """int: Maximum number of 32-bit registers available per multiprocessor."""
498 return self._get_cached_attribute( 2;wjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw
499 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2;wjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw
500 )
502 @property
503 def managed_memory(self) -> bool:
504 """bool: Device can allocate managed memory on this system."""
505 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfZx
507 @property
508 def multi_gpu_board(self) -> bool:
509 """bool: Device is on a multi-GPU board."""
510 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2fy
512 @property
513 def multi_gpu_board_group_id(self) -> int:
514 """int: Unique id for a group of devices on the same multi-GPU board."""
515 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2gy
517 @property
518 def host_native_atomic_supported(self) -> bool:
519 """bool: Link between the device and the host supports all native atomic operations."""
520 return bool( 2.w
521 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2.w
522 )
524 @property
525 def single_to_double_precision_perf_ratio(self) -> int:
526 """int: Ratio of single precision performance (in floating-point operations per second) to double precision performance."""
527 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2pz
529 @property
530 def pageable_memory_access(self) -> bool:
531 """bool: Device supports coherently accessing pageable memory without calling cudaHostRegister on it."""
532 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2jy
534 @property
535 def concurrent_managed_access(self) -> bool:
536 """bool: Device can coherently access managed memory concurrently with the CPU."""
537 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 26e7e8e9e!e#e.ell/e:e;e=e?e@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfnkdfefffRmolSmJlTmKlLlUm@vWl$kVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw5mSl
539 @property
540 def compute_preemption_supported(self) -> bool:
541 """bool: Device supports compute preemption."""
542 return bool( 2)w
543 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2)w
544 )
546 @property
547 def can_use_host_pointer_for_registered_mem(self) -> bool:
548 """bool: Device can access host registered memory at the same virtual address as the CPU."""
549 return bool( 2Ww
550 self._get_cached_attribute( 2Ww
551 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 2Ww
552 )
553 )
555 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
557 @property
558 def cooperative_launch(self) -> bool:
559 """bool: Device supports launching cooperative kernels via cuLaunchCooperativeKernel."""
560 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2Kx~k
562 # TODO: A few attrs are missing here (NVIDIA/cuda-python#675)
564 @property
565 def max_shared_memory_per_block_optin(self) -> int:
566 """int: Maximum optin shared memory per block."""
567 return self._get_cached_attribute( 24y
568 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 24y
569 )
571 @property
572 def pageable_memory_access_uses_host_page_tables(self) -> bool:
573 """bool: Device accesses pageable memory via the host's page tables."""
574 return bool( 23w
575 self._get_cached_attribute( 23w
576 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 23w
577 )
578 )
580 @property
581 def direct_managed_mem_access_from_host(self) -> bool:
582 """bool: The host can directly access managed memory on the device without migration."""
583 return bool( 2!j
584 self._get_cached_attribute( 2!j
585 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 2!j
586 )
587 )
589 @property
590 def virtual_memory_management_supported(self) -> bool:
591 """bool: Device supports virtual memory management APIs like cuMemAddressReserve, cuMemCreate, cuMemMap and related APIs."""
592 return bool( 25w{k^oJeKe}nsl
593 self._get_cached_attribute( 25w{k^oJeKe}nsl
594 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 25w{k^oJeKe}nsl
595 )
596 )
598 @property
599 def handle_type_posix_file_descriptor_supported(self) -> bool:
600 """bool: Device supports exporting memory to a posix file descriptor with cuMemExportToShareableHandle, if requested via cuMemCreate."""
601 return bool( 2Ppk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew#jfwQ gwhwp q r s
602 self._get_cached_attribute( 2Ppk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew#jfwQ gwhwp q r s
603 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2Ppk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew#jfwQ gwhwp q r s
604 )
605 )
607 @property
608 def handle_type_win32_handle_supported(self) -> bool:
609 """bool: Device supports exporting memory to a Win32 NT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
610 return bool( 2,w
611 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2,w
612 )
614 @property
615 def handle_type_win32_kmt_handle_supported(self) -> bool:
616 """bool: Device supports exporting memory to a Win32 KMT handle with cuMemExportToShareableHandle, if requested via cuMemCreate."""
617 return bool( 2Zw
618 self._get_cached_attribute( 2Zw
619 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 2Zw
620 )
621 )
623 @property
624 def max_blocks_per_multiprocessor(self) -> int:
625 """int: Maximum number of blocks per multiprocessor."""
626 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 24x
628 @property
629 def generic_compression_supported(self) -> bool:
630 """bool: Device supports compression of memory."""
631 return bool( 2?v
632 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2?v
633 )
635 @property
636 def max_persisting_l2_cache_size(self) -> int:
637 """int: Maximum L2 persisting lines capacity setting in bytes."""
638 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 28x
640 @property
641 def max_access_policy_window_size(self) -> int:
642 """int: Maximum value of CUaccessPolicyWindow.num_bytes."""
643 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 20x
645 @property
646 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool:
647 """bool: Device supports specifying the GPUDirect RDMA flag with cuMemCreate."""
648 return bool( 2Yw
649 self._get_cached_attribute( 2Yw
650 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 2Yw
651 )
652 )
654 @property
655 def reserved_shared_memory_per_block(self) -> int:
656 """int: Shared memory reserved by CUDA driver per block in bytes."""
657 return self._get_cached_attribute( 2ax
658 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2ax
659 )
661 @property
662 def sparse_cuda_array_supported(self) -> bool:
663 """bool: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays."""
664 return bool( 2bx
665 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2bx
666 )
668 @property
669 def read_only_host_register_supported(self) -> bool:
670 """bool: True if device supports using the cuMemHostRegister flag CU_MEMHOSTREGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU, False if not."""
671 return bool( 2~w
672 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2~w
673 )
675 @property
676 def memory_pools_supported(self) -> bool:
677 """bool: Device supports using the cuMemAllocAsync and cuMemPool family of APIs."""
678 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpDpEpFpGpHpIpJpKpvxwxxxyxzxAx(e6e.gReSe/gAd:g;g=g?g@g)e7e[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8ekhVeWelhCdmhnhohphqh+e9erhXeYeshDdthuhvhwhxh,e!eyhZe0ezhEdAhBhChDhEh-e#eFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3hBxCxLpsptpFkGkqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLzPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewcydfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw*h5mrlSl+hwp4efwQ gwMzhw,h-h.h/h:h;h=h?h@h[hId7f8f]h^h_h`hJd{h|h}h~hR S T U V aibicidieibgcgdgegfgLeMeNeOePefiKd9f!fgihiiijiLdkilimini#f$f%f'f(fMd)f*foipiNzqirisitiuiviwixiyi+ , - . / OdPdQdziAiBiCiDiRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: ; = ? @ PiQiRiSiTigghgigjgkgUiViWiXiYiVd/f:fZi0i1i2iWd3i4i5i6i2 3 4 5 6 7i8i9i!i#ilgmgngogpgvgwgxgygzg$iXd;f=f%i'i(i)iYd*i+i,i-i?f@f[f]f^fZd_f`f.i/i:i;i=i?i@i[i]i^i_i`i` { | } ~ 1d2d3d{i|i}i~iaj4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljabbbcbdbebmjnjojpjqjqgrgsgtgugp q r s rjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j`A{A
680 @property
681 def gpu_direct_rdma_supported(self) -> bool:
682 """bool: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)."""
683 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 2Px}nsl
685 @property
686 def gpu_direct_rdma_flush_writes_options(self) -> int:
687 """int: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the CUflushGPUDirectRDMAWritesOptions enum."""
688 return self._get_cached_attribute( 2*w
689 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2*w
690 )
692 @property
693 def gpu_direct_rdma_writes_ordering(self) -> int:
694 """int: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See CUGPUDirectRDMAWritesOrdering for the numerical values returned here."""
695 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2Qx
697 @property
698 def mempool_supported_handle_types(self) -> int:
699 """int: Handle types supported with mempool based IPC."""
700 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2dy
702 @property
703 def deferred_mapping_cuda_array_supported(self) -> bool:
704 """bool: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays."""
705 return bool( 2Xw
706 self._get_cached_attribute( 2Xw
707 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 2Xw
708 )
709 )
711 @property
712 def numa_config(self) -> int:
713 """int: NUMA configuration of a device: value is of type CUdeviceNumaConfig enum."""
714 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2qk
716 @property
717 def numa_id(self) -> int:
718 """int: NUMA node ID of the GPU memory."""
719 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2oz
721 @property
722 def multicast_supported(self) -> bool:
723 """bool: Device supports switch multicast and reduction operations."""
724 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2hy
726 @property
727 def surface_alignment(self) -> int:
728 """int: Surface alignment requirement in bytes."""
729 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2my
731 @property
732 def async_engine_count(self) -> int:
733 """int: Number of asynchronous engines."""
734 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2Dx
736 @property
737 def can_tex2d_gather(self) -> bool:
738 """bool: True if device supports 2D texture gather operations, False if not."""
739 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Gx
741 @property
742 def maximum_texture2d_gather_width(self) -> int:
743 """int: Maximum 2D texture gather width."""
744 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2=x
746 @property
747 def maximum_texture2d_gather_height(self) -> int:
748 """int: Maximum 2D texture gather height."""
749 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2;x
751 @property
752 def stream_priorities_supported(self) -> bool:
753 """bool: True if device supports stream priorities, False if not."""
754 return bool( 2cx
755 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 2cx
756 )
758 @property
759 def can_flush_remote_writes(self) -> bool:
760 """bool: The CU_STREAM_WAIT_VALUE_FLUSH flag and the CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See Stream Memory Operations for additional details."""
761 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2Ex
763 @property
764 def host_register_supported(self) -> bool:
765 """bool: Device supports host memory registration via cudaHostRegister."""
766 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2Vx
768 @property
769 def timeline_semaphore_interop_supported(self) -> bool:
770 """bool: External timeline semaphore interop is supported on the device."""
771 return bool( 24w
772 self._get_cached_attribute( 24w
773 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 24w
774 )
775 )
777 @property
778 def cluster_launch(self) -> bool:
779 """bool: Indicates device supports cluster launch."""
780 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2Hx
782 @property
783 def can_use_64_bit_stream_mem_ops(self) -> bool:
784 """bool: 64-bit operations are supported in cuStreamBatchMemOp and related MemOp APIs."""
785 return bool( 2'w
786 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2'w
787 )
789 @property
790 def can_use_stream_wait_value_nor(self) -> bool:
791 """bool: CU_STREAM_WAIT_VALUE_NOR is supported by MemOp APIs."""
792 return bool( 2(w
793 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2(w
794 )
796 @property
797 def dma_buf_supported(self) -> bool:
798 """bool: Device supports buffer sharing with dma_buf mechanism."""
799 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2ok
801 # Start of CUDA 12 device attributes
803 @property
804 def ipc_event_supported(self) -> bool:
805 """bool: Device supports IPC Events."""
806 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 2Wx
808 @property
809 def mem_sync_domain_count(self) -> int:
810 """int: Number of memory domains the device supports."""
811 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2by
813 @property
814 def tensor_map_access_supported(self) -> bool:
815 """bool: Device supports accessing memory using Tensor Map."""
816 return bool( 2*jwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f
817 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2*jwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f4f5f6f
818 )
820 @property
821 def handle_type_fabric_supported(self) -> bool:
822 """bool: Device supports exporting memory to a fabric handle with cuMemExportToShareableHandle() or requested with cuMemCreate()."""
823 return bool( 2+w
824 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2+w
825 )
827 @property
828 def unified_function_pointers(self) -> bool:
829 """bool: Device supports unified function pointers."""
830 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2sy
832 @property
833 def mps_enabled(self) -> bool:
834 """bool: Indicates if contexts created on this device will be shared via MPS."""
835 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2ey
837 @property
838 def host_numa_id(self) -> int:
839 """int: NUMA ID of the host node closest to the device. Returns -1 when system does not support NUMA."""
840 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2k XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)lUxLl#h5g$h%h'h(h6g)h7g|n`k
842 @property
843 def d3d12_cig_supported(self) -> bool:
844 """bool: Device supports CIG with D3D12."""
845 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2Lx
847 @property
848 def mem_decompress_algorithm_mask(self) -> int:
849 """int: The returned value shall be interpreted as a bitmask, where the individual bits are described by the CUmemDecompressAlgorithm enum."""
850 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2~x
852 @property
853 def mem_decompress_maximum_length(self) -> int:
854 """int: The returned value is the maximum length in bytes of a single decompress operation that is allowed."""
855 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2ay
857 @property
858 def vulkan_cig_supported(self) -> bool:
859 """bool: Device supports CIG with Vulkan."""
860 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2ty
862 @property
863 def gpu_pci_device_id(self) -> int:
864 """int: The combined 16-bit PCI device ID and 16-bit PCI vendor ID.
866 Returns 0 if the driver does not support this query.
867 """
868 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 2Sx
870 @property
871 def gpu_pci_subsystem_id(self) -> int:
872 """int: The combined 16-bit PCI subsystem ID and 16-bit PCI subsystem vendor ID.
874 Returns 0 if the driver does not support this query.
875 """
876 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 2Tx
878 @property
879 def host_numa_virtual_memory_management_supported(self) -> bool:
880 """bool: Device supports HOST_NUMA location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
881 return bool( 20w
882 self._get_cached_attribute( 20w
883 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 20w
884 )
885 )
887 @property
888 def host_numa_memory_pools_supported(self) -> bool:
889 """bool: Device supports HOST_NUMA location with the cuMemAllocAsync and cuMemPool family of APIs."""
890 return bool( 2/w
891 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2/w
892 )
894 # Start of CUDA 13 device attributes
896 @property
897 def host_numa_multinode_ipc_supported(self) -> bool:
898 """bool: Device supports HOST_NUMA location IPC between nodes in a multi-node system."""
899 return bool( 2:w
900 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2:w
901 )
903 @property
904 def host_memory_pools_supported(self) -> bool:
905 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs."""
906 return bool( 2k XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l-w_k1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h6mTl4eUlHk7gVl_A|n`kIw
907 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2k XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l-w_k1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h6mTl4eUlHk7gVl_A|n`kIw
908 )
910 @property
911 def host_virtual_memory_management_supported(self) -> bool:
912 """bool: Device supports HOST location with the virtual memory management APIs like cuMemCreate, cuMemMap and related APIs."""
913 return bool( 21w
914 self._get_cached_attribute( 21w
915 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 21w
916 )
917 )
919 @property
920 def host_alloc_dma_buf_supported(self) -> bool:
921 """bool: Device supports page-locked host memory buffer sharing with dma_buf mechanism."""
922 return bool( 23y
923 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 23y
924 )
926 @property
927 def only_partial_host_native_atomic_supported(self) -> bool:
928 """bool: Link between the device and the host supports only some native atomic operations."""
929 return bool( 22w
930 self._get_cached_attribute( 22w
931 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 22w
932 )
933 )
936class Device:
937 """Represent a GPU and act as an entry point for cuda.core features.
939 This is a singleton object that helps ensure interoperability
940 across multiple libraries imported in the process to both see
941 and use the same GPU device.
943 While acting as the entry point, many other CUDA resources can be
944 allocated such as streams and buffers. Any :obj:`~_context.Context` dependent
945 resource created through this device, will continue to refer to
946 this device's context.
948 Newly returned :obj:`~_device.Device` objects are thread-local singletons
949 for a specified device.
951 Note
952 ----
953 Will not initialize the GPU.
955 Parameters
956 ----------
957 device_id : int, optional
958 Device ordinal to return a :obj:`~_device.Device` object for.
959 Default value of `None` return the currently used device.
961 """
962 __slots__ = (
963 "_device_id",
964 "_memory_resource",
965 "_has_inited",
966 "_properties",
967 "_resources",
968 "_uuid",
969 "_context",
970 "__weakref__",
971 )
973 def __new__(cls, device_id: Device | int | None = None):
974 if isinstance(device_id, Device): 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)r:Dqz;Drz=Dsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSp2DZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs#E+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2Afw*DQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
975 return device_id 2FkGk:D;D=D7wXy8w9w!wYy|k#wPpQzQpRzRp*lSp2D|v}vTpUpVpWpXpYpZpt 0p1p2p3p4p5p6p7p8p~vwyxy9p!p#pxpyp8A9A!A#Anlzk#kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!h*hrl#Ewp^oJeKe}n2C(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A2A*D3A4Ap q
977 Device_ensure_cuda_initialized() 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
978 device_id = Device_resolve_device_id(device_id) 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
979 devices = Device_ensure_tls_devices(cls) 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
981 try: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
982 return devices[device_id] 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
983 except IndexError: 2UDVD
984 raise ValueError(f"device_id must be within [0, {len(devices)}), got {device_id}") from None 2UDVD
986 def _check_context_initialized(self):
987 if not self._has_inited: 23C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpReSeTeUeVeWeXeYeZe0e1e2eLp8C9CZCspdBeBfBtpgBFkGk^kImJm!CKmLmMmNmOmPm:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC9kelQmflglhlilOz!k|D}D$E%E~D'E(E#C$CaEbE)E*E+E,E-EPzQe,z4D5D6D7D8D9D!D#D{D.E/EklYD[rJCwyxyZy3Dxpyp8A9A!A#A%C'C(C)C*C+C'k(k0C,CSzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml1z2z3z4z5z6z7z8z9z!z#z$z%zTz-lal}k0y1y~k'z2yIk^v+j:E;EcE=EdE?E@EeEfE[E]E^EgE_EhEiEjEkElEmEnEoEpE`EqErEsEtE{EuEvE|E}E~EaFwEbFxEcFdFyEzEeFfFgFAEhFBECEDEEEFEGEHEIEJEiFKELEMENEjFOEPEkFlFmFnFQEoFREpFqFSETErFsFtFUEuFVEWEXEYEZE0E1E2E3EvF4E5E6E7EwF8E9ExFyFzkWl#k$k_kUzHkag+D,jvo%m'm(mxo-jyo.jzo)m*m+mAo7f8fR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X ,m-mbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJo5exktkukvkyk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlngg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSo_jTomnnnonUo/f:f2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 pnqnlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3o8jymBlClDlzm;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$or s ek%oTnUnVn'ofk(oWnXnYn)ogk*oZn0n1n+ohk,o2n3n4n-oik.o5n6n7n/ojk:o8n9n!n;okk=o#n$n%n(zlk?o'n(n)n@o{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlDmDYCnDoD
988 raise CUDAError(
989 f"Device {self._device_id} is not yet initialized, perhaps you forgot to call .set_current() first?"
990 )
993 @classmethod
994 def get_all_devices(cls):
995 """
996 Query the available device instances.
998 Returns
999 -------
1000 tuple of Device
1001 A tuple containing instances of available devices.
1002 """
1003 from cuda.core import system 26w3exDyDzD+lZzBD$wCDDDEDFDGDHDIDJDKDLDMD(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A`A{A
1004 total = system.get_num_devices() 26w3exDyDzD+lZzBD$wCDDDEDFDGDHDIDJDKDLDMD(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A`A{A
1005 return tuple(cls(device_id) for device_id in range(total)) 26w3exDyDzD+lZzBD$wCDDDEDFDGDHDIDJDKDLDMD(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A`A{A
1007 def to_system_device(self) -> 'cuda.core.system.Device':
1008 """
1009 Get the corresponding :class:`cuda.core.system.Device` (which is used
1010 for NVIDIA Machine Library (NVML) access) for this
1011 :class:`cuda.core.Device` (which is used for CUDA access).
1013 The devices are mapped to one another by their UUID.
1015 Returns
1016 -------
1017 cuda.core.system.Device
1018 The corresponding system-level device instance used for NVML access.
1019 """
1020 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2Vw
1022 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2Vw
1023 raise RuntimeError(
1024 "cuda.core.system.Device requires cuda_bindings 13.1.2+ or 12.9.6+"
1025 )
1027 from cuda.core.system import Device as SystemDevice 2Vw
1028 return SystemDevice(uuid=self.uuid) 2Vw
1030 @property
1031 def device_id(self) -> int:
1032 """Return device ordinal."""
1033 return self._device_id 2_v`v(e6e)e7e*e8e+e9e,e!e-e#eFkGk[o]o^k:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC|D}DqD0D]v-zAF$E%E~D'E(E1DaEbEboPp,DQzQpRz9mRp$D*lSp2DQe|vwk}vTpUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p!m5p%D'D6p(D#m7p)Dkl8pYD[r~vwyxy( Zy9pYz!p$m#pxpyp8A9A!A#AMp'k(kZz[y|r]yTz-lal^v+jjlnlzkADolKl#k$kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!h*hrl#Ewp{k^oJeKe}n2C7m8mNDODagjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAw(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A2A*D3A4A,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jdpepp q ekfkgkhkikjkkklk*zBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0g1g2g+z
1035 @property
1036 def pci_bus_id(self) -> str:
1037 """Return a PCI Bus Id string for this device."""
1038 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2+l|rVw
1039 return bus_id[:12].decode() 2+l|rVw
1041 def can_access_peer(self, peer: Device | int) -> bool:
1042 """Check if this device can access memory from the specified peer device.
1044 Queries whether peer-to-peer memory access is supported between this
1045 device and the specified peer device.
1047 Parameters
1048 ----------
1049 peer : Device | int
1050 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID.
1051 """
1052 peer = Device(peer)
1053 cdef int d1 = <int> self.device_id
1054 cdef int d2 = <int> peer.device_id
1055 if d1 == d2:
1056 return True
1057 cdef int value = 0
1058 with nogil:
1059 HANDLE_RETURN(cydriver.cuDeviceCanAccessPeer(&value, d1, d2))
1060 return bool(value)
1062 @property
1063 def uuid(self) -> str:
1064 """Return a UUID for the device.
1066 Returns 16-octets identifying the device. If the device is in
1067 MIG mode, returns its MIG UUID which uniquely identifies the
1068 subscribed MIG compute instance.
1070 Note
1071 ----
1072 MIG UUID is only returned when device is in MIG mode and the
1073 driver is older than CUDA 11.4.
1075 The UUID is cached after first access to avoid repeated CUDA API calls.
1077 """
1078 cdef cydriver.CUuuid uuid
1079 cdef cydriver.CUdevice dev
1080 cdef bytes uuid_b
1081 cdef str uuid_hex
1083 if self._uuid is None: 2]v-zPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew+l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhw*kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1084 dev = self._device_id 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1085 with nogil: 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1086 IF CUDA_CORE_BUILD_MAJOR == 12:
1087 HANDLE_RETURN(cydriver.cuDeviceGetUuid_v2(&uuid, dev))
1088 ELSE: # 13.0+
1089 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1090 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1091 uuid_hex = uuid_b.hex() 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1092 # 8-4-4-4-12
1093 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2]v-zk t ( 8gP +l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kQ *kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1094 return self._uuid 2]v-zPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew+l$A0z%A'AVw]y5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhw*kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1096 @property
1097 def name(self) -> str:
1098 """Return the device name."""
1099 # Use 256 characters to be consistent with CUDA Runtime
1100 cdef int LENGTH = 256 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1101 cdef bytes name = bytes(LENGTH) 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1102 cdef char* name_ptr = name 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1103 cdef cydriver.CUdevice this_dev = self._device_id 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1104 with nogil: 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1105 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1106 name = name.split(b"\0")[0] 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1107 return name.decode() 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox[y@k
1109 @property
1110 def properties(self) -> DeviceProperties:
1111 """Return a :obj:`~_device.DeviceProperties` class with information about the device."""
1112 if self._properties is None: 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipLCjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzJzKzLz9kelQmflglhlilOz!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v,z~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
1113 self._properties = DeviceProperties._init(self._device_id) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPm4h9kelQmflglhlil!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfk t ( P mknk!jok?v#j$j%jpk'j(j)jqkrk*jG Ilmlb GdHd6A7AhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm#k$k_kMl5hpl3gNl6h7h8hOl9hql4g!hVmBwCwWmXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$h%h3m'h4m(hRl6g)h*h5m6mrlSlTl+h4eUlHk7gVl`kIw{kJeKesl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
1115 return self._properties 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`vpxqxrxsxtx(g)g*g+g,g-guxzpApBpCpCm-v.vDmEmFmGmHmDpEpFpGpHpIpJpKp/vvxwxxxyxzxAxfpgp(e6e8d.gReSe/gAd:g;g=g?g@g)e7e9d[gTeUe]gBd^g_g`g{g|g}g~gahbhchdhehfhghhhihjh*e8e!dkhVeWelhCdmhnhohphqh+e9e#drhXeYeshDdthuhvhwhxh,e!e$dyhZe0ezhEdAhBhChDhEh-e#e%dFh1e2eGhFdHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h:vBxCxhp;vLp=vipLCjpkplpmpnpopppqprpsptpFkGk[o]o^kImJmupKmLmMmNmOmPmqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzJzKzLz9kelQmflglhlilOz!k.ell/e:e;e=e?e*n@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPpk QpXlRpYlSpZlQe|v,z~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwewvpMpPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffjlnlzkRmolSmJlTmKlLlUm@vWl#k$k_kMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl+hwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcfwQ gwMzhw,h'd-h.hJc(d/h:hKcLc;h)d=h?hMc*d@h[hNcId7f8f]h^h_h`hJd{h|h}h~hR g S T c h U V d W X +d,d-d.d/dai:dbici;ddieibg) cgdgH * egfgI Len MeNel o OePem fiKd9f!fgihiiijiLdkilimini#fY $f%fu Z 'f(fv Md)f*foipiNzqirisitiui=dviwi?dxiyi+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dAiBiYc{dCiDiZcRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiRi}dSiTigg[ hgigJ ] jgkgK UiTdViWi#cUdXiYi$cVd/f:fZi0i1i2iWd3i4i5i6i2 i 3 4 e j 5 6 f 7 8 ~daebecede7iee8i9ife!i#ilg^ mgngL _ ogpgM vg%cwgxg9 'cygzg! $iXd;f=f%i'i(i)iYd*i+i,i-i?f# @f[fA $ ]f^fB Zd_f`f.i/i:i;i=i?i@i[ige]i^ihe_i`i` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ine|i}i=coe~iaj?c4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjojqepjqjqgfbrgsgN gbtgugO p q r s bdcdrjresjtjddseujvjedfdgdhdidjdwj6dxjyjkd7dzjAjldBjteCjDjmdueEjFjndGjveHjIjodweJjKjpdLjxeMjNjqdyeOjPjrdQjzeRjSjsdAeTjUjtdVjBeWjXjudCeYjZjvdwd0jDe1j2jxdEe3j4jydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v`A{AwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f
1117 @property
1118 def resources(self) -> DeviceResources:
1119 """Return the hardware resource query namespace for this device."""
1120 if self._resources is None: 2coAgBgb GdHdCgDgEgFgGgHgdoeofogohoiojokolomonooopoqorosotouo
1121 self._resources = DeviceResources._init(self._device_id) 2coAgBgb GdHdCgDgEgFgGgHgdoeofogohoiojokolomonooopoqorosotouo
1122 return self._resources 2coAgBgb GdHdCgDgEgFgGgHgdoeofogohoiojokolomonooopoqorosotouo
1124 @property
1125 def compute_capability(self) -> ComputeCapability:
1126 """Return a named tuple with 2 fields: major and minor."""
1127 cdef DeviceProperties prop = self.properties 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipLCjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!kQe,zvpMpG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_bTC`bUC{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{vFeGeHeIe
1128 if "compute_capability" in prop._cache: 2a KCblJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipLCjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!kQe,zvpMpG Ilmlb GdHd6A7A}k~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_bTC`bUC{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{vFeGeHeIe
1129 return prop._cache["compute_capability"] 2a KCLC7wXy8w9w!wYy|k#wlxmxnxOzQe,zvpmlb GdHd~kQCRC'zyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_bTC`bUC{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcVCsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcc d H I l m u v + OcPc, w x - QcRcScTcUc. / VcWcXcNdYcZc: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cJ K Td#cUd$ce f L M 9 ! A B ` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d=c?cab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadN O bdcdddedfdgdhdidjd6dkd7dldmdndodpdqdrdsdtdudvdwdxdydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v
1130 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe
1131 prop._cache["compute_capability"] = cc 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe
1132 return cc 2a blJkKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8kCm-v.vDmEmFmGmHm/vfpgp8dAd9dBd!dCd#dDd$dEd%dFd:vhp;v=vipjpkplpmpnpopppqprpFkGk[o]o^kImJmupKmLmMmNmOmPm|k9kelQmflglhlil!kQevpMpG Ilmlb GdHd6A7A}khbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`nifjfkflfmfnfofpfqf{nrfsftfufvf{vFeGeHeIe
1134 @property
1135 def arch(self) -> str:
1136 """Return compute capability as a string (e.g., '75' for CC 7.5)."""
1137 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a 7wXy8w9w!wYy|k#wlxmxnxvpmlb GdHd'zFBmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSb+nTbUb7mVb8mWbXbYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcc d H I l m u v + OcPc, w x - QcRcScTcUc. / VcWcXcYcZc: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cJ K #c$ce f L M 9 ! A B ` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c=c?cab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadN O bdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v
1139 @property
1140 def context(self) -> Context:
1141 """Return the :obj:`~_context.Context` associated with this device.
1143 Note
1144 ----
1145 Device must be initialized.
1147 """
1148 self._check_context_initialized() 2vozobg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoxkvlxmTolg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3oymElAm%o(o*o,o.o:o=o?o
1149 return self._context 2vozobg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoxkvlxmTolg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3oymElAm%o(o*o,o.o:o=o?o
1151 @property
1152 def memory_resource(self) -> MemoryResource:
1153 """Return :obj:`~_memory.MemoryResource` associated with this device."""
1154 cdef int attr, device_id
1155 if self._memory_resource is None: 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g+z
1156 # If the device is in TCC mode, or does not support memory pools for some other reason,
1157 # use the SynchronousMemoryResource which does not use memory pools.
1158 device_id = self._device_id 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z
1159 with nogil: 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z
1160 HANDLE_RETURN( 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z
1161 cydriver.cuDeviceGetAttribute( 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z
1162 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id
1163 )
1164 )
1165 if attr == 1: 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z
1166 from cuda.core._memory import DeviceMemoryResource 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z
1167 self._memory_resource = DeviceMemoryResource(self._device_id) 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g+z
1168 else:
1169 from cuda.core._memory._legacy import _SynchronousMemoryResource
1170 self._memory_resource = _SynchronousMemoryResource(self._device_id)
1172 return self._memory_resource 2'k(kTz-lal^v+jag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklkIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g+z
1174 @memory_resource.setter
1175 def memory_resource(self, mr):
1176 from cuda.core._memory import MemoryResource
1177 assert_type(mr, MemoryResource)
1178 self._memory_resource = mr
1180 @property
1181 def default_stream(self) -> Stream:
1182 """Return default CUDA :obj:`~_stream.Stream` associated with this device.
1184 The type of default stream returned depends on if the environment
1185 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
1187 If set, returns a per-thread default stream. Otherwise returns
1188 the legacy stream.
1190 """
1191 return default_stream() 2FkGk|D}DZF$e~D%e'eaEbE)E*E+E,E-EQzRz9m$D*l2DwkpD0FrD1FsD2FtD3FuD4FvD5FwD6F7F8F9F!F#F$F%F'F(F)F*F!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dxpyp8A9A!A#A'k(kyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWy^v+jjlnlzkolJlWl#k$k_kpl3gql4gkxPlQl5gRl6grlSlTl#Ewp4eUlHk7gVlag,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jp q ekfkgkhkikjkkklkPDIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g+z
1193 def __int__(self):
1194 """Return device_id."""
1195 return self._device_id 2?D@D[D'k(k
1197 def __repr__(self):
1198 return f"<Device {self._device_id} ({self.name})>" 2]vbo,DQzRz9m$D*l2DQe,z4D5D6D7D8D9D!D#DwkpD!m%D'D(D#m)DklYD[rJCwyxyZy3DYz.D$m/Dox@k
1200 def __hash__(self) -> int:
1201 return hash(self.uuid) 2]v-zPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTw}vaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk~v%kUw( 9p8g!p(l#p)lawbwcwP dwew$A0z%A'A5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhw*kLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kp q r s [k]kDkEk
1203 def __eq__(self, other) -> bool:
1204 if not isinstance(other, Device): 2]vPpk QpXlRpYlSpZlTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk9p8g!p(l#p)lawbwcwP dwewSD0zTDWD5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhwwovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcpp q r s DkEkYC
1205 return NotImplemented 2]vWDwovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcpYC
1206 return self._device_id == other._device_id 2]vPpk QpXlRpYlSpZlTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk9p8g!p(l#p)lawbwcwP dwewSD0zTD5h3g6h7h8h9h4g!h#h5g$h%h'h(h6g)h*h7g|n`kfwQ gwhwwop q r s DkEk
1208 def __reduce__(self):
1209 return Device, (self.device_id,) 2bo,DQzRz9m$D*l2DQewkrDsDtDuDvDwD!m%D'D(D#m)DklYD[rwyxyZyYz$mxpyp8A9A!A#Adpep
1211 def set_current(self, ctx: Context = None) -> Context | None:
1212 """Set device to be used for GPU executions.
1214 Initializes CUDA and sets the calling thread to a valid CUDA
1215 context. By default the primary context is used, but optional `ctx`
1216 parameter can be used to explicitly supply a :obj:`~_context.Context` object.
1218 Providing a `ctx` causes the previous set context to be popped and returned.
1220 Parameters
1221 ----------
1222 ctx : :obj:`~_context.Context`, optional
1223 Optional context to push onto this device's current thread stack.
1225 Returns
1226 -------
1227 :obj:`~_context.Context`, optional
1228 Popped context.
1230 Examples
1231 --------
1232 Acts as an entry point of this object. Users always start a code by
1233 calling this method, e.g.
1235 >>> from cuda.core import Device
1236 >>> dev0 = Device(0)
1237 >>> dev0.set_current()
1238 >>> # ... do work on device 0 ...
1240 """
1241 cdef ContextHandle h_context
1242 cdef cydriver.CUcontext prev_ctx, curr_ctx
1243 cdef Context prev_owned = None 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdQDCgDgEglsFgRDGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1245 if ctx is not None: 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdQDCgDgEglsFgRDGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1246 # TODO: revisit once Context is cythonized
1247 assert_type(ctx, Context) 2QDRD
1248 if ctx._device_id != self._device_id: 2QDRD
1249 raise RuntimeError(
1250 "the provided context was created on the device with"
1251 f" id={ctx._device_id}, which is different from the target id={self._device_id}"
1252 )
1253 if self._has_inited and self._context is not None: 2QDRD
1254 prev_owned = self._context 2QDRD
1255 # prev_ctx is the previous context
1256 curr_ctx = as_cu(ctx._h_context) 2QDRD
1257 prev_ctx = NULL 2QDRD
1258 with nogil: 2QDRD
1259 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2QDRD
1260 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2QDRD
1261 self._has_inited = True 2QDRD
1262 self._context = ctx # Store owning context reference 2QDRD
1263 if prev_ctx != NULL: 2QDRD
1264 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2QDRD
1265 return prev_owned 2QDRD
1266 return Context._from_handle(Context, create_context_handle_ref(prev_ctx), self._device_id)
1267 else:
1268 # use primary ctx
1269 h_context = get_primary_context(self._device_id) 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1270 if h_context.get() == NULL: 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1271 raise ValueError("Cannot set NULL context as current")
1272 with nogil: 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1273 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1274 self._has_inited = True 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1275 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2$p%p'p(p)p*p~A+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqq(g)g*grq+g,g-gsqtquqaBvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvzwzxzyzzzAzBz4hCzDzEzFzGzHzIzJzKzLz*r+r,r-r.r/r:riB;r.ell=r/e:e;e=e?e*n?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcfPz@rPpk QpXlRpYlSpZl|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vpDaoTp0lUpVpWpXpYpZpt 0p1p2p3p4p1l2lAk3l4l5l6l7l8l9l!l#l5p$l6p%l7p'l8pBk[r~vJC%kUw( 9p8g!p(l#p)lawbwcwP dwew]r^r_rjB`r{rkB'k(klBmBnBoBpBqBrBZzsBtBox,luBvBSzG Ck}r)k~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kBBCBDBEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWymbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBskx2B3BWmCs4BXm5BDsYm6B7BZmEs8BPl9B!B0m#B$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl?B@B[B]B{k^oJeKe}nslQsTbUbRsVbSsWbXbYbTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcskucvcwcxcyczcAcBcCcDcEcFcGcHcIc2Afw*DQ 3Agw+DMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev5Afvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyv*zzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0vwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1277 def create_context(self, options: ContextOptions = None) -> Context:
1278 """Create a new :obj:`~_context.Context` object.
1280 Note
1281 ----
1282 The newly created context will not be set as current.
1284 Parameters
1285 ----------
1286 options : :obj:`~_context.ContextOptions`, optional
1287 Customizable dataclass for context creation options.
1289 Returns
1290 -------
1291 :obj:`~_context.Context`
1292 Newly created context object.
1294 """
1295 cdef int i
1296 cdef object resources
1297 cdef object res
1298 cdef SMResource sm_res
1299 cdef WorkqueueResource wq_res
1300 cdef GreenCtxHandle h_green
1302 if options is None: 2ZDAgBgb -lalCgDgEgFgGgHg-D!E
1303 raise ValueError( 2!E
1304 "options with device resources must be provided to create a green context"
1305 )
1307 options = check_or_create_options(ContextOptions, options, "Context options") 2ZDAgBgb -lalCgDgEgFgGgHg-D!E
1308 if options.resources is None: 2ZDAgBgb -lalCgDgEgFgGgHg-D!E
1309 raise ValueError( 2!E
1310 "ContextOptions.resources must be provided to create a green context"
1311 )
1313 resources = tuple(options.resources) 2ZDAgBgb -lalCgDgEgFgGgHg-D
1314 if len(resources) == 0: 2ZDAgBgb -lalCgDgEgFgGgHg-D
1315 raise ValueError("ContextOptions.resources must not be empty")
1317 cdef vector[cydriver.CUdevResource] c_resources
1318 c_resources.resize(len(resources)) 2ZDAgBgb -lalCgDgEgFgGgHg-D
1320 for i, res in enumerate(resources): 2ZDAgBgb -lalCgDgEgFgGgHg-D
1321 if isinstance(res, SMResource): 2ZDAgBgb -lalCgDgEgFgGgHg-D
1322 sm_res = <SMResource>res 2ZDAgBgb -lalCgDgEgFgGgHg-D
1323 if not sm_res._is_usable: 2ZDAgBgb -lalCgDgEgFgGgHg-D
1324 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2-D
1325 c_resources[i] = sm_res._resource 2ZDAgBgb -lalCgDgEgFgGgHg
1326 elif isinstance(res, WorkqueueResource): 2al
1327 wq_res = <WorkqueueResource>res 2al
1328 c_resources[i] = wq_res._wq_config_resource 2al
1329 else:
1330 raise TypeError(f"Unsupported context resource type: {type(res)}")
1332 h_green = create_green_ctx_handle( 2ZDAgBgb -lalCgDgEgFgGgHg
1333 c_resources.data(),
1334 <unsigned int>(c_resources.size()),
1335 <cydriver.CUdevice>(self._device_id), 2ZDAgBgb -lalCgDgEgFgGgHg
1336 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM),
1337 )
1338 if h_green.get() == NULL: 2ZDAgBgb -lalCgDgEgFgGgHg
1339 HANDLE_RETURN(get_last_error())
1340 raise RuntimeError("Failed to create CUDA green context")
1342 return Context._from_green_ctx(Context, h_green, self._device_id) 2ZDAgBgb -lalCgDgEgFgGgHg
1344 def create_stream(self, obj: IsStreamType | None = None, options: StreamOptions | None = None) -> Stream:
1345 """Create a :obj:`~_stream.Stream` object.
1347 New stream objects can be created in two different ways:
1349 1) Create a new CUDA stream with customizable ``options``.
1350 2) Wrap an existing foreign `obj` supporting the ``__cuda_stream__`` protocol.
1352 Option (2) internally holds a reference to the foreign object
1353 such that the lifetime is managed.
1355 Note
1356 ----
1357 Device must be initialized.
1359 Parameters
1360 ----------
1361 obj : :obj:`~_stream.IsStreamType`, optional
1362 Any object supporting the ``__cuda_stream__`` protocol.
1363 options : :obj:`~_stream.StreamOptions`, optional
1364 Customizable dataclass for stream creation options.
1366 Returns
1367 -------
1368 :obj:`~_stream.Stream`
1369 Newly created stream object.
1371 """
1372 self._check_context_initialized() 23C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpLp8C9CeBfBFkGk^kImJm!CKmLmMmNmOmPm:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC9kelQmflglhlilOz!k|D}D$E%E~D'E(E#C$CaEbE)E*E+E,E-EPzQe,z4D5D6D7D8D9D!D#D{D.E/EklYD[rJCwyxyZy3Dxpyp8A9A!A#A%C'C(C)C*C+C,CSzG Ck-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml1z2z3z4z5z6z7z8z9z!z#z$z%z}k0y1y~k'z2yIk:E;EcE=EdE?E@EeEfE[E]E^EgE_EhEiEjEkElEmEnEoEpE`EqErEsEtE{EuEvE|E}E~EaFwEbFxEcFdFyEzEeFfFgFAEhFBECEDEEEFEGEHEIEJEiFKELEMENEjFOEPEkFlFmFnFQEoFREpFqFSETErFsFtFUEuFVEWEXEYEZE0E1E2E3EvF4E5E6E7EwF8E9ExFyFzkWlUzHkag+DxoyoAoykgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSoUozmqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$or s 'o)o+o-o/o;o(z@o{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlDmDYCnDoD
1373 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 23C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpLp8C9CeBfBFkGk^kImJm!CKmLmMmNmOmPm:D;D=D^D_D`D7wXy8w9w!wYy|k#wlxmxnx?D@D[DMCNCOC9kelQmflglhlilOz!k|D}D$E%E~D'E(E#C$CaEbE)E*E+E,E-EPzQe,z4D5D6D7D8D9D!D#D{D.E/EklYD[rJCwyxyZy3Dxpyp8A9A!A#A%C'C(C)C*C+C,CSzG Ck-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml1z2z3z4z5z6z7z8z9z!z#z$z%z}k0y1y~k'z2yIk:E;EcE=EdE?E@EeEfE[E]E^EgE_EhEiEjEkElEmEnEoEpE`EqErEsEtE{EuEvE|E}E~EaFwEbFxEcFdFyEzEeFfFgFAEhFBECEDEEEFEGEHEIEJEiFKELEMENEjFOEPEkFlFmFnFQEoFREpFqFSETErFsFtFUEuFVEWEXEYEZE0E1E2E3EvF4E5E6E7EwF8E9ExFyFzkWlUzHkag+DxoyoAoykgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSoUozmqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$or s 'o)o+o-o/o;o(z@o{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlDmDYCnDoD
1375 def create_event(self, options: EventOptions | None = None) -> Event:
1376 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`.
1378 Note
1379 ----
1380 Device must be initialized.
1382 Parameters
1383 ----------
1384 options : :obj:`EventOptions`, optional
1385 Customizable dataclass for event creation options.
1387 Returns
1388 -------
1389 :obj:`~_event.Event`
1390 Newly created event object.
1392 """
1393 self._check_context_initialized() 2bBReSeTeUeVeWeXeYeZe0e1e2eZCspdBeBfBtpgB^k{D0CCk1C)kwB%m'm(m)m*m+m7f8f9g!gW X ,m-mtlultkukvk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlnwlxlylmnnnon/f:f$g%g7 8 pnqnzlAlBlClDl;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnFlGlHlTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n
1394 cdef Context ctx = self._context 2bBReSeTeUeVeWeXeYeZe0e1e2eZCspdBeBfBtpgB^k{D0CCk1C)kwB%m'm(m)m*m+m7f8f9g!gW X ,m-mtlultkukvk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlnwlxlylmnnnon/f:f$g%g7 8 pnqnzlAlBlClDl;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnFlGlHlTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n
1395 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2bBReSeTeUeVeWeXeYeZe0e1e2eZCspdBeBfBtpgB^k{D0CCk1C)kwB%m'm(m)m*m+m7f8f9g!gW X ,m-mtlultkukvk9f!f#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfn)f*fgnhnw x 0 1 injn+f,f-f.fy z knlnwlxlylmnnnon/f:f$g%g7 8 pnqnzlAlBlClDl;f=f?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMn_f`fNnOnC D % ' PnQn{f|f}f~fE F RnSnFlGlHlTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n
1397 def allocate(self, size, *, stream: Stream | GraphBuilder) -> Buffer:
1398 """Allocate device memory from a specified stream.
1400 Allocates device memory of `size` bytes on the specified `stream`
1401 using the memory resource currently associated with this Device.
1403 Note
1404 ----
1405 Device must be initialized.
1407 Parameters
1408 ----------
1409 size : int
1410 Number of bytes to allocate.
1411 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
1412 Keyword-only. The stream establishing the stream ordering semantic.
1413 Must be passed explicitly; pass ``self.default_stream`` to use
1414 the default stream.
1416 Returns
1417 -------
1418 :obj:`~_memory.Buffer`
1419 Newly created buffer object.
1421 """
1422 self._check_context_initialized() 2'k(kTz-lal^v+j,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklk
1423 return self.memory_resource.allocate(size, stream=stream) 2'k(kTz-lal^v+j,j-j.jR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^j5j5e#g6j_j2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7j8j'g9jekfkgkhkikjkkklk
1425 def sync(self):
1426 """Synchronize the device.
1428 Note
1429 ----
1430 Device must be initialized.
1432 """
1433 self._check_context_initialized() 2xpyp8A9A!A#A'k(k0y1y2yIkcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9EzkWl#k$k_kHk
1434 handle_return(runtime.cudaDeviceSynchronize()) 2xpyp8A9A!A#A'k(k0y1y2yIkcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9EzkWl#k$k_kHk
1436 def create_graph_builder(self) -> "GraphBuilder":
1437 """Create a new :obj:`~graph.GraphBuilder` object.
1439 Returns
1440 -------
1441 :obj:`~graph.GraphBuilder`
1442 Newly created graph builder object.
1444 """
1445 from cuda.core.graph._graph_builder import GraphBuilder 2|AblJk}AKkcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k:D;D=D^D_D`D7w8w9w!w|k#wlxmxnx?D@D[DMCNCOC9kelflglhlilOz!k
1447 self._check_context_initialized() 2|AblJk}AKkcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k:D;D=D^D_D`D7w8w9w!w|k#wlxmxnx?D@D[DMCNCOC9kelflglhlilOz!k
1448 return GraphBuilder._init(stream=self.create_stream(), is_stream_owner=True) 2|AblJk}AKkcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k:D;D=D^D_D`D7w8w9w!w|k#wlxmxnx?D@D[DMCNCOC9kelflglhlilOz!k
1451cdef inline int Device_ensure_cuda_initialized() except? -1:
1452 """Initialize CUDA driver and check version compatibility (once per process)."""
1453 global _is_cuInit
1454 if _is_cuInit is False: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1455 with _lock, nogil:
1456 HANDLE_RETURN(cydriver.cuInit(0))
1457 _is_cuInit = True
1458 try:
1459 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch
1460 except ImportError:
1461 pass
1462 else:
1463 warn_if_cuda_major_version_mismatch()
1464 return 0 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1467cdef inline int Device_resolve_device_id(device_id) except? -1:
1468 """Resolve device_id, defaulting to current device or 0."""
1469 cdef cydriver.CUdevice dev
1470 cdef cydriver.CUcontext ctx
1471 cdef cydriver.CUresult err
1472 if device_id is None: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQs]DTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1473 with nogil: 2a KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+CvpMp'k(k0C,CPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]ySzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AwmUzwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTb2CUb7mVb8mWbNDXbODYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g
1474 err = cydriver.cuCtxGetDevice(&dev) 2a KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+CvpMp'k(k0C,CPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]ySzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AwmUzwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTb2CUb7mVb8mWbNDXbODYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g
1475 if err == cydriver.CUresult.CUDA_SUCCESS: 2a KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+CvpMp'k(k0C,CPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]ySzG Ck1C)kwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AwmUzwp4eUlHk7gVl_A|n`kIw{k^oJeKe}nsl+nTb2CUb7mVb8mWbNDXbODYbagZbgf,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^nhf_n`ncCeCifjfkflfmfnfofpf)zqf{nrfsftfufvflCiw{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6fIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2g
1476 return int(dev) 2KC3C4C|AblJk}AKkBmcldlLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k_v`v5CzpApBpCpCmbB6C7CDmEmFmGmHmDpEpFpGpHpIpJpKpfpgp(e6e8dReSeAd)e7e9dTeUeBd*e8e!dVeWeCd+e9e#dXeYeDd,e!e$dZe0eEd-e#e%d1e2eFdhpLpipLCjpkplpmpnpopppqp8C9CrpZCspdBeBfBtpgBFkGk[o]o^kImJmup!CKmLmMmNmOmPm7wXy8w9w!wYy|k#wlxmxnx9kelQmflglhlilOz!k.ellqD/e:e;e=e?e*n@e$e3e[e%e#C]e$C'e^e_e`e{e|e}e~eafbfcfPzk XlYlZl~nao0l1l2lAk3l4l5l6l7l8l9l!l#l$l%l'lBk%k8g(l)l%C'C(C)C*C+C0C,C3ykzmz4y5yozSz1CwB-C.C/C:C;C=CIl?C@C[C]C^C_C`Cml}k0y1y~kQCRC'zyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2y/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZAjlnlzkADRmolSmJlTmKlLlUm@vWl#k$k_kXDMl5hpl3gNl6hjx7hNp8hOl9hql4gOp!hVmBwkxCwWm6yXmDwYmEwZmFwPlGw0mHw1m#hQl5g2m$hvy%h3m'h4m(hRl6g[v)h*h5m6mrlSlTl0A1AUzwpUlHk7gVl_A|n`kIw{k^o}nsl+nTb2CUb7mVb8mWbNDXbODYbagZb,n-n.n/n:n;n=n?n@n[n%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc'dJc(dKcLc)dMc*dNcIdJdg c h d W X +d,d-d.d/d:d;d) H * I n l o m KdLdY u Z v Md=d?d+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_d`dYc{dZcRdSd: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!c|d}d[ J ] K Td#cUd$cVdWdi e j f 7 8 ~daebecedeeefe^ L _ M %c9 'c! XdYd# A $ B Zdgehe` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dlemene=coe?c4d5dab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadpeqefbN gbO bdcdreddseedfdgdhdidjd6dkd7dldtemduendveodwepdxeqdyerdzesdAetdBeudCevdwdDexdEeydzd]n^n_n`ncCeC{nlC{v5APD{CWC|C}C~CaDXCbDcDdDeDfDgDhDiDjDkDlD*zmDYCnDoDwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIe4f5f6f^y_y`y{y|y}y~yazbzczdzezfzgzhzVzWzXz
1477 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT:
1478 with nogil: 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g
1479 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g
1480 assert <void*>(ctx) == NULL 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g
1481 return 0 # cudart behavior 2a vpMp'k(kPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw-w.wUx/w:w0wVx1wWxlzXxYxZx0x1x2x3x4x5x6x7x8x9x;w!x$j#x$x%j%x'x(x=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqk2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuy,l[y|rVw]yG Ck)khbibjbkblbIk.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwm4eJeKegfhfifjfkflfmfnfofpf)zqfrfsftfufvfiwIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g
1482 else:
1483 HANDLE_RETURN(err)
1484 elif device_id < 0: 2a $p%p'p(pJk)p*pKk~A+p,p-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquqaBvqwqzpxqApyqBpzqCpAqBqCqDqEq-vFq.vGqHqIqJqKqLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrtr;vurvrLpwr=vxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrspPrdBQrRrSrtpTrgBUrFkVrGkWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*r+r,r-r.r/r:riB!k;r.ell=r0D/e]v:e-z;e=e?e?r@e$e3e[e%e]e'e^e1D_e`e{e|e}e~eafbfcf@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l]r^r_rjB`r{rkB'k(klBmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBox'AuBWDvB}rwB~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms~kBBCBDBEBmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff^v+jnsGBHBospsIBjlJBKBLBMBqsrsNBssOBPBtsusQBvswsRBxsysSBTBUBVBWBzsAsXBYBZB0B1BBs2B3BCs4B5BDs6B7BEs8B9B!B#B$BFs%B'B(B)BGs*B+B,BHsIsJs-BKs.BLsMs/BNs:B;BOs+h=BPs?B@B[B]B{kBD$wCDDDEDFDGDHDIDJDKDLDMDQs]DTb2CUbRsVbSsWbXbYbagTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev`A{AfvgvhvWCivjvkvlvmvXCnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1485 raise ValueError(f"device_id must be >= 0, got {device_id}")
1486 return device_id 2a $p%p'p(pJk)p*pKk~A+p,p-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquqaBvqwqzpxqApyqBpzqCpAqBqCqDqEq-vFq.vGqHqIqJqKqLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrtr;vurvrLpwr=vxryrcBzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrspPrdBQrRrSrtpTrgBUrFkVrGkWrXrYrZr0r1r2rhB3r4r5r6r7r8r9r!r#r$r%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*r+r,r-r.r/r:riB!k;r.ell=r0D/e]v:e-z;e=e?e?r@e$e3e[e%e]e'e^e1D_e`e{e|e}e~eafbfcf@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l]r^r_rjB`r{rkB'k(klBmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBox'AuBWDvB}rwB~rxBasbscsyBdsesfsgshsiszBjsksAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms~kBBCBDBEBmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff^v+jnsGBHBospsIBjlJBKBLBMBqsrsNBssOBPBtsusQBvswsRBxsysSBTBUBVBWBzsAsXBYBZB0B1BBs2B3BCs4B5BDs6B7BEs8B9B!B#B$BFs%B'B(B)BGs*B+B,BHsIsJs-BKs.BLsMs/BNs:B;BOs+h=BPs?B@B[B]B{kBD$wCDDDEDFDGDHDIDJDKDLDMDQsTb2CUbRsVbSsWbXbYbagTsZbUsVsWsXsYsZs0s1s2s3s%w0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuQuRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCdCfC/u:u;u=u?ugChCiC@ujC[ukC]u^u_umC`uiw{u|u}u~uavbvcvnCdvev`A{AfvgvhvWCivjvkvlvmvXCnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1489cdef inline list Device_ensure_tls_devices(cls):
1490 """Ensure thread-local Device singletons exist, creating if needed."""
1491 cdef int total
1492 try: 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1493 return _tls.devices 2a KC3C$p4C%p|A'pbl(pJk)p}A*pKk~ABm+pcl,pdl-pLk.pMk/pNk:pOk;pPk=pQk?pRk@pSk[pTk]pUk^pVk_pWk`pXk{pYk|pZk}p0k~p1kaq2kbq3kcq4kdq5keq6kfq7kgq8khq_viq`vjqpxkqlq6wqxmqnqrxoqsxpqtxqq(g)g*grq+g,g-guxsqtquq5CaBvqwqzpxqApyqBpzqCpAqCmBqbBCq6CDq7CEq-vFq.vGqDmHqEmIqFmJqGmKqHmLqDpMqEpNqFpOqGpPqHpQqIpRqJpSqKpTq/vUqVqWqXqvxYqwxZqxx0qyx1qzx2qAx3qfp4qgp5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorpr:vqrBxrrCxsrhptr;vurvrLpwr=vxripyrLCcBjpzrkpArlpBrmpCrDrErFrGrnpHropIrppJrqpKr8CLr9CMrrpNrZCOrspPrdBQreBRrfBSrtpTrgBUrFkVrGkWr[oXr]oYr^kZrIm0rJm1rup2r!ChB3rKm4rLm5rMm6rNm7rOm8r9r!r#r$rPm%r'r(r)rqzrzsztzuzvz7wwzXyxz8wyz9wzz!wAzYyBz|k4h#wCzlxDzmxEznxFzGzHzIzMCJzNCKzOCLz9k*rel+rQm,rfl-rgl.rhl/ril:rOziB!k;r.ellqD=r0D/e]v:e-z;e=e?e*n?r@e$e3e[e%e#C]e$C'e^e1D_e`e{e|e}e~eafbfcfPz@rboPpk QzQpRzXl9mRpYl*lSpZlQe|v~nJwKwLwMwNwOwPwQwRwSwTwwk}vaoTp0lUprDVpWpsDXpYptDZpt uD0p1pvD2p3pwD4p1l2lAk3l4l5l6l7l8l9l!l#l!m5p$l6p%l#m7p'lkl8pBkxDyDzD[r~v%kwyUwxy( Zy9p8gYz!p(l$m#p)lxpawypbw8Acw9AP !Adw#Aew+l%C]r'C^r(C_r)CjB*C`r+C{rkBvpMp'k(k0ClB,CmB$AnBSDoB0zpBTDqB%ArBZzUDsBVDtBPCDxExFxGx'wWw(wizHxmkIxjz)wJxnkKxLxXw!jokMx?vNxOx*wPxYwQxRxSxTx+w#j,wZw3y-w.wUx/w:w0wVx1wkzWxlzXxYxZx0x1x2x3x4x5x6x7x8xmz9x;w!x4y$j#x$x%j%x'x(x5y=w)x*x+x,x-x?w@wpk[w.x/x]w:x;x=x?x^w_w@x[x]x^x'j`w_x`x{w{x(j|x|w)j}w}x~xaybynzcydyeyfygyhyiyqkoz2wjy3wrkkyly~waxpzbxcxmyny*joypy4wqyrysy5wtyuyox,l'AuBWDvB[y|rVw]ySzG Ck1C}r)kwB~r-CxB.Cas/Cbs:Ccs;CyB=CdsIles?Cfs@Cgs[Chs]Cis^CzB_Cjs`CksmlAB1z2z3z4z5z6z7z8z9z!z#z$z%zcoAgBgTzb -lGdalHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouoms}k0y1y~kQCBBCBRCDB'zEByyzyhbAyByCyDyEyFyGyHyIyJyKyLyMyibNyOyPyQyjbkbRySyTyUylbVyWyFBmbnbobSCpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefff.z2yIk.l/z:z;z=z^v+jnsGBHBospsIB?z@z/l:l[z]z;l=l?l^z@l_z[l`z{z]l^l_l|z`l}z~z{l|laAbAcAdAeAfAgAhA}l~liAamjAbmcmkAlAmAdmemnAoApAqArAfmsAtAuAvAwAxAgmyAzAhmAABACADAimEAjmFAGAHAIAJAkmKAlmLAmmnmMANAomOApmPAqmQArmRAsmSAtmTAUAVAWAXAumYAvmZAjlnlzkJBADKBRmolSmLBJlMBTmqsKlrsLlNBUmss@vOBWlPB#kts$kus_kQBXDMlvs5hwsplRB3gxsNlys6hSBjxTB7hUBNpVB8hWBOlzs9hAsqlXB4gYBOpZB!h0BVm1BBwBskx2BCw3BWmCs6y4BXm5BDwDsYm6BEw7BZmEsFw8BPl9BGw!B0m#BHw$B1mFs#h%BQl'B5g(B2m)B$hGsvy*B%h+B3m,B'hHs4mIs(hJsRl-B6gKs[v.B)hLs*hMs5m/B6mNsrl:BSl;BTlOs+h0A1AwmUzwp4eUl=BHkPs7gVl_A?B|n@B`k[BIw]B{k^oJeKe}nslBD$wCDDDEDFDGDHDIDJDKDLDMD+nQsTb2CUb7mRsVb8mSsWbNDXbODYbagTsZbgf,nUs-nVs.nWs/nXs:nYs;nZs=n0s?n1s@n2s[n3s%w0b1b2b3b4b5b6b7bdx8bex9bfx!bgx#bhx$bix%bjw'bkw(blw)bmw*bnw+bow,bpw-bqw.brw/bsw:btw;buw=bvw?bww@bxw[byw]bzw^bAw_bTC`bUC{b7y|b8y}b9y~b!yac#ybc$ycc%ydc'yec(yfc)ygc*yhc+yic,yjc-ykc.ylc/ymc:ync;yoc=ypc?yqc@yrcVCsc(Atc)Ask*Auc+Avc,Awc-Axc.Ayc/Azc:AAc;ABc=ACc?ADc@AEc[AFc]AGc^AHcIc2AfwQ 3AgwMz4Ahw,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiNzqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucudu^BodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqu_BrususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCu(zDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNu]nOu^nPuhf_nQu`nRu`BSu{BTuUuVuWuXuYu|BZu0u1u2u3u}B4u5u~B6u7u8u9u!u#u$u%u'u(u)u*u+u,u-uaC.ubCcCdCeCfCifjfkflf/u:u;u=u?ugChCiC@ujC[ukC]u^umfnfofpf)zqf{n_urfsftfufvflCmC`uiw{u|u}u~uavbvcv{vnCdvev`A{A5AfvPDgv{ChvWCiv|Cjv}Ckv~ClvaDmvXCnvbDovcDpvdDqveDrvfDsvgDtvhDuviDvvjDwvkDxvlDyv*zzvmDAvYCBvnDCvoDDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvoCIvJvKvLvpCMvNvqCOvrCPvsCtCQvuCRvSvvCTvUvVvWvXvIgJg^y_y`yKgLgMg{y|y}y~yazbzNgOgPgQgRgczdzezSgTgUgVgWgXgYgfzgzhzZg0gVzWz1gXz2gYvZv0v+zwC1v2vxCyCzC3v4v5v6v7vACBC8vCCDC9v!vEC#v$v%v'vFCGC(v)vHCIC*v+v,v
1494 except AttributeError: 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1495 with nogil: 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1496 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1497 devices = _tls.devices = [] 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1498 for dev_id in range(total): 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1499 device = super(Device, cls).__new__(cls) 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1500 device._device_id = dev_id 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1501 device._memory_resource = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1502 device._has_inited = False 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1503 device._properties = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1504 device._resources = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1505 device._uuid = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1506 device._context = None 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1507 devices.append(device) 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v
1508 return devices 2a $p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlq6wmqnqoqpqqq(g)g*grq+g,g-gsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q(e6e8d.gReSe/g6q7q8q9qAd:g;g=g?g@g!q#q)e7e9d[gTeUe]g$q%q'q(qBd^g_g`g{g|g)q*q}g~gah+qbhchdhehfhghhhihjh*e8e!dkhVeWelh,q-q.q/qCdmhnhohphqh:q;q+e9e#drhXeYesh=q?q@q[qDdthuhvhwhxh]q^q,e!e$dyhZe0ezh_q`q{q|qEdAhBhChDhEh}q~q-e#e%dFh1e2eGharbrcrdrFdHhIhJhKhLherfrMhNhOhPhQhRhShThUhVhWhXhgrYhZh0h1h2h3hhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r4h*r+r,r-r.r/r:r;r.e=r/e:e;e=e?e?r@e$e3e[e%e]e'e^e_e`e{e|e}e~eafbfcf@rbok 9m*lQewkt !m#mkl( $mxpypP +l]r^r_r`r{rmknk!jok#j$j%jpk'j(j)jqkrk*j,l|rG Ck}r)k~rasbscsdsesfsgshsisjskscoAgBgb GdHdCgDgEglsFgGgHgdoeofogohoiojokolomonooopoqorosotouomshbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbdfefffIk.l+jnsosps/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOs+hwm4ePsJeKe$wQsTbUbRsVbSsWbXbYbTsZbgfUsVsWsXsYsZs0s1s2s3s0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcQ ,h,j'd4svowo-h%m'm(m.h5s6s7s8sJc(d/h:hKc9sxo!s#s-jLcyo;h.j)d$szo*k=h)m*m+m?h%s's(s)sMc*d@h[hNc*sAo+s,sId7f8f]h^h_h`hJd{h|h}h~hR g /jS 9g!gT :j;j=j?jc h @jU V d [j]j^jW X +d,d-d.d/dai:dbi,m-mci-s.s/s;ddiei:s;s=sbg5j) BocgtluldgCoDoEoFoH * GoegfgI HoIoJoLe5en +kxkMetkukvkNe,k-k.k/kl o :kOePem ;kyk=k?kfiKd9f!fgihiiijiLdkilimini#f#gY .mvl$f/m:m%f;m=m?m@mu Z [m'f(fv ]m^m_m`m{m|m}m~manbncndnenfnMd)f*foipiqirisitiui=d?svignhnwi@s[s]s?dxiyi^s_s`s{s|s}s~satbtctdtet+ OcPc, w x - QcRcScTcUc. / VcWcXcNd0 1 Od@d[d]dPdQd^d_dzi`dftAiinjnBigthtitjtYc{dCiDiZcktltmtRd+f,fEiFiGiHiIiSd-f.fJiKiLiMiNiOi: 0c1c; y z = 2c3c4c5c6c7c? @ 8c9c!cPi|dQiknlnRintotpt}dSiTiqtrtgg6j[ KoxmhgwlxlyligLoMoNoOoJ ] PojgkgK QoRoSostUi_jTdttToutVimnnnonWivtwtxtyt#cUdXiYi$cztUoAtBtVd/f:fZi0i1i2iWd3i4i5i6i2 i `j3 $g%g4 {j|j}j~je j ak5 6 f bkckdk7 8 ~daebecede7iee8ipnqn9iCtDtEtfe!i#iFtGtHtlg7j^ VomgzlAlngWoXoYoZoL _ 0oogpgM 1o2o3ovg8j%c_oymwgBlClDlxg`o{o|o}o9 'c~oygzg! apzmbpcp$iXd;f=f%i'i(i)iYd*i+i,i-i?f'g# rnEl@fsntn[funvnwnxnA $ yn]f^fB znAnBnCnDnEnFnGnHnInJnKnLnMnZd_f`f.i/i:i;i=i?i@i[igeIt]iNnOn^iJtKtLthe_i`iMtNtOtPtQtRtStTtUtVtWtXt` (c)c{ C D | *c+c,c-c.c} ~ /c:c;c0d% ' 1diejeke2d3dleme{ineYt|iPnQn}iZt0t1t2t=coe~iaj?c3t4t5t4d{f|fbjcjdjejfj5d}f~fgjhjijjjkjljab@c[cbbE F cb]c^c_c`c{c|cdbeb}c~cadmjpenjRnSnoj6t7t8tqepjqj9t!tqg9jfb4oAmrgFlGlHlsg5o6o7o8oN gb9otgugO !o#o$o#tdpepp q r s bdcdrjekre$t%o@ksjTnUnVntj%t't(t)tddseujvjedfdgdhdidjd*t'o+t,twjfk6d-t(o.txjWnXnYnyj/t:t;t=tkd7dzjAjld?t)o@t[tBjgkte]t*o[kCjZn0n1nDj^t_t`t{tmdueEjFjnd|t+o}t~tGjhkveau,o]kHj2n3n4nIjbucuduodweJjKjpdeu-ofuguLjikxehu.oDkMj5n6n7nNjiujukuluqdyeOjPjrdmu/onuouQjjkzepu:oEkRj8n9n!nSjqurususdAeTjUjtdtu;ouuvuVjkkBewu=oxuWj#n$n%nXjyuzuAuBuudCeYjZjvdwdCuDuEu0jlkDeFu?oGu1j'n(n)n2jHuIuJuKuxdEe3j4jydzdLu@oMuNuOuPuhfQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.uifjfkflf/u:u;u=u?u@u[u]u^umfnfofpfqf_urfsftfufvf`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3fFeGeHeIeEvFvGv4f5f6fHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2gYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v