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

459 statements  

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

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

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cpython 

8  

9from cuda.bindings cimport cydriver 

10from cuda.core._utils.cuda_utils cimport check_or_create_options, HANDLE_RETURN 

11from libcpp.vector cimport vector 

12  

13import threading 

14  

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) 

30  

31from cuda.core._stream import IsStreamType, Stream 

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 

41  

42from typing import TYPE_CHECKING 

43  

44if TYPE_CHECKING: 

45 import cuda.core.system # no-cython-lint 

46 from cuda.core.graph import GraphBuilder 

47  

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

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

50_tls = threading.local() 

51_lock = threading.Lock() 

52cdef bint _is_cuInit = False 

53  

54  

55cdef class DeviceProperties: 

56 """ 

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

58  

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

60 """ 

61 cdef: 

62 int _handle 

63 dict _cache 

64  

65 def __init__(self, *args, **kwargs) -> None: 

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

67  

68 @classmethod 

69 def _init(cls, handle: int) -> DeviceProperties: 

70 cdef DeviceProperties self = DeviceProperties.__new__(cls) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

71 self._handle = handle 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

72 self._cache = {} 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

73 return self 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

74  

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

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

77 cdef int val 

78 cdef cydriver.CUresult err 

79 with nogil: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

80 err = cydriver.cuDeviceGetAttribute(&val, attr, self._handle) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

81 if err == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE and default is not None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

82 return <int>default 

83 HANDLE_RETURN(err) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

84 return val 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbftj4xk vg;jm l NoVpNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

85  

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

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

88 cached = self._cache.get(attr) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACADANlEAFA/kGAHAIAJAKALAMANAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^l=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsf{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

89 if cached is not None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACADANlEAFA/kGAHAIAJAKALAMANAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^l=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsf{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

90 return cached 24e5e6e7e8e9exAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASALe,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmemfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxn nnTAtlPlnmUzPzYpQz=jVzsy$k%k'd(dUp'kRzSzTzQxRxSxUAEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7g{B

91 cdef int value = self._get_attribute(attr, default) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf4xk vg;jm l NoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

92 self._cache[attr] = value # setdefault not needed for ints 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf4xk vg;jm l NoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

93 return value 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/kWhXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf4xk vg;jm l NoVpNyOyPyQy(x5x)xRySyTy*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkzlz.jmznzozpzqzrzsz$xtzTpuzvzwziyjyky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0hWp1hGlHl2hvlBgIl3hWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6h7hLlDg-lvk8h.l/lMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`b{b|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

94  

95 @property 

96 def max_threads_per_block(self) -> int: 

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

98 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK) 2:ymynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxRz:z;z=z?z@z[zSz]z^z_z`z{z|zTz}z~zaAbAcAdA

99  

100 @property 

101 def max_block_dim_x(self) -> int: 

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

103 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X) 2$y

104  

105 @property 

106 def max_block_dim_y(self) -> int: 

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

108 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y) 2%y

109  

110 @property 

111 def max_block_dim_z(self) -> int: 

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

113 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z) 2'y

114  

115 @property 

116 def max_grid_dim_x(self) -> int: 

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

118 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X) 2)yn

119  

120 @property 

121 def max_grid_dim_y(self) -> int: 

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

123 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y) 2*y

124  

125 @property 

126 def max_grid_dim_z(self) -> int: 

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

128 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z) 2+y

129  

130 @property 

131 def max_shared_memory_per_block(self) -> int: 

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

133 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK) 2a /ymynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxRz:z;z=z?z@z[zSz]z^z_z`z{z|zTz}z~zaAbAcAdA

134  

135 @property 

136 def total_constant_memory(self) -> int: 

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

138 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY) 2Az

139  

140 @property 

141 def warp_size(self) -> int: 

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

143 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_WARP_SIZE) 2Ez

144  

145 @property 

146 def max_pitch(self) -> int: 

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

148 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PITCH) 2-y

149  

150 @property 

151 def maximum_texture1d_width(self) -> int: 

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

153 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH) 2}y

154  

155 @property 

156 def maximum_texture1d_linear_width(self) -> int: 

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

158 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH) 2|y

159  

160 @property 

161 def maximum_texture1d_mipmapped_width(self) -> int: 

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

163 return self._get_cached_attribute( 2~x

164 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH 2~x

165 ) 

166  

167 @property 

168 def maximum_texture2d_width(self) -> int: 

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

170 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH) 2-j

171  

172 @property 

173 def maximum_texture2d_height(self) -> int: 

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

175 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT) 2,j

176  

177 @property 

178 def maximum_texture2d_linear_width(self) -> int: 

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

180 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH) 2dz

181  

182 @property 

183 def maximum_texture2d_linear_height(self) -> int: 

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

185 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT) 2bz

186  

187 @property 

188 def maximum_texture2d_linear_pitch(self) -> int: 

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

190 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH) 2cz

191  

192 @property 

193 def maximum_texture2d_mipmapped_width(self) -> int: 

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

195 return self._get_cached_attribute( 2dy

196 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH 2dy

197 ) 

198  

199 @property 

200 def maximum_texture2d_mipmapped_height(self) -> int: 

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

202 return self._get_cached_attribute( 2cy

203 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT 2cy

204 ) 

205  

206 @property 

207 def maximum_texture3d_width(self) -> int: 

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

209 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH) 2gz

210  

211 @property 

212 def maximum_texture3d_height(self) -> int: 

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

214 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT) 2fz

215  

216 @property 

217 def maximum_texture3d_depth(self) -> int: 

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

219 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH) 2ez

220  

221 @property 

222 def maximum_texture3d_width_alternate(self) -> int: 

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

224 return self._get_cached_attribute( 28j

225 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE 28j

226 ) 

227  

228 @property 

229 def maximum_texture3d_height_alternate(self) -> int: 

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

231 return self._get_cached_attribute( 2fy

232 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE 2fy

233 ) 

234  

235 @property 

236 def maximum_texture3d_depth_alternate(self) -> int: 

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

238 return self._get_cached_attribute( 2ey

239 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE 2ey

240 ) 

241  

242 @property 

243 def maximum_texturecubemap_width(self) -> int: 

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

245 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH) 2hz

246  

247 @property 

248 def maximum_texture1d_layered_width(self) -> int: 

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

250 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH) 2+j

251  

252 @property 

253 def maximum_texture1d_layered_layers(self) -> int: 

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

255 return self._get_cached_attribute( 2}x

256 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS 2}x

257 ) 

258  

259 @property 

260 def maximum_texture2d_layered_width(self) -> int: 

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

262 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH) 2oq

263  

264 @property 

265 def maximum_texture2d_layered_height(self) -> int: 

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

267 return self._get_cached_attribute( 2ay

268 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT 2ay

269 ) 

270  

271 @property 

272 def maximum_texture2d_layered_layers(self) -> int: 

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

274 return self._get_cached_attribute( 2by

275 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS 2by

276 ) 

277  

278 @property 

279 def maximum_texturecubemap_layered_width(self) -> int: 

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

281 return self._get_cached_attribute( 2hy

282 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH 2hy

283 ) 

284  

285 @property 

286 def maximum_texturecubemap_layered_layers(self) -> int: 

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

288 return self._get_cached_attribute( 2gy

289 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS 2gy

290 ) 

291  

292 @property 

293 def maximum_surface1d_width(self) -> int: 

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

295 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH) 2?y

296  

297 @property 

298 def maximum_surface2d_width(self) -> int: 

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

300 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH) 2]y

301  

302 @property 

303 def maximum_surface2d_height(self) -> int: 

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

305 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT) 2@y

306  

307 @property 

308 def maximum_surface3d_width(self) -> int: 

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

310 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH) 2`y

311  

312 @property 

313 def maximum_surface3d_height(self) -> int: 

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

315 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT) 2_y

316  

317 @property 

318 def maximum_surface3d_depth(self) -> int: 

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

320 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH) 2^y

321  

322 @property 

323 def maximum_surface1d_layered_width(self) -> int: 

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

325 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH) 2=y

326  

327 @property 

328 def maximum_surface1d_layered_layers(self) -> int: 

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

330 return self._get_cached_attribute( 2^x

331 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS 2^x

332 ) 

333  

334 @property 

335 def maximum_surface2d_layered_width(self) -> int: 

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

337 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH) 2[y

338  

339 @property 

340 def maximum_surface2d_layered_height(self) -> int: 

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

342 return self._get_cached_attribute( 2_x

343 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT 2_x

344 ) 

345  

346 @property 

347 def maximum_surface2d_layered_layers(self) -> int: 

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

349 return self._get_cached_attribute( 2`x

350 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS 2`x

351 ) 

352  

353 @property 

354 def maximum_surfacecubemap_width(self) -> int: 

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

356 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH) 2{y

357  

358 @property 

359 def maximum_surfacecubemap_layered_width(self) -> int: 

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

361 return self._get_cached_attribute( 2|x

362 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH 2|x

363 ) 

364  

365 @property 

366 def maximum_surfacecubemap_layered_layers(self) -> int: 

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

368 return self._get_cached_attribute( 2{x

369 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS 2{x

370 ) 

371  

372 @property 

373 def max_registers_per_block(self) -> int: 

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

375 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK) 2.y

376  

377 @property 

378 def clock_rate(self) -> int: 

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

380 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLOCK_RATE) 2tj4x$AI Bl:j

381  

382 @property 

383 def texture_alignment(self) -> int: 

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

385 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT) 2yz

386  

387 @property 

388 def texture_pitch_alignment(self) -> int: 

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

390 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT) 2zz

391  

392 @property 

393 def gpu_overlap(self) -> bool: 

394 """bool: Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use :attr:`~DeviceProperties.async_engine_count` instead.""" 

395 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_OVERLAP)) 23y

396  

397 @property 

398 def multiprocessor_count(self) -> int: 

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

400 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT) 2qzn

401  

402 @property 

403 def kernel_exec_timeout(self) -> bool: 

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

405 return bool(self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT)) 2'A

406  

407 @property 

408 def integrated(self) -> bool: 

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

410 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_INTEGRATED)) 2*j

411  

412 @property 

413 def can_map_host_memory(self) -> bool: 

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

415 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY)) 2Py

416  

417 @property 

418 def compute_mode(self) -> int: 

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

420 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_MODE) 2%A

421  

422 @property 

423 def concurrent_kernels(self) -> bool: 

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

425 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS)) 2Uy

426  

427 @property 

428 def ecc_enabled(self) -> bool: 

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

430 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ECC_ENABLED)) 2Zy

431  

432 @property 

433 def pci_bus_id(self) -> int: 

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

435 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_BUS_ID) 2uz

436  

437 @property 

438 def pci_device_id(self) -> int: 

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

440 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID) 2vz

441  

442 @property 

443 def pci_domain_id(self) -> int: 

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

445 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID) 2wz

446  

447 @property 

448 def tcc_driver(self) -> bool: 

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

450 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TCC_DRIVER)) 2/j

451  

452 @property 

453 def memory_clock_rate(self) -> int: 

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

455 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE) 2(A

456  

457 @property 

458 def global_memory_bus_width(self) -> int: 

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

460 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH) 21y

461  

462 @property 

463 def l2_cache_size(self) -> int: 

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

465 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE) 28y

466  

467 @property 

468 def max_threads_per_multiprocessor(self) -> int: 

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

470 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR) 2;ymynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx

471  

472 @property 

473 def unified_addressing(self) -> bool: 

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

475 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING)) 2a Bz

476  

477 @property 

478 def compute_capability_major(self) -> int: 

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

480 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpSyI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe

481  

482 @property 

483 def compute_capability_minor(self) -> int: 

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

485 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpTyI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe

486  

487 @property 

488 def global_l1_cache_supported(self) -> bool: 

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

490 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED)) 20y

491  

492 @property 

493 def local_l1_cache_supported(self) -> bool: 

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

495 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED)) 29y

496  

497 @property 

498 def max_shared_memory_per_multiprocessor(self) -> int: 

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

500 return self._get_cached_attribute( 2]xmynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx

501 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR 2]xmynyoypyqyryfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx

502 ) 

503  

504 @property 

505 def max_registers_per_multiprocessor(self) -> int: 

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

507 return self._get_cached_attribute( 2@xfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx

508 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR 2@xfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwx

509 ) 

510  

511 @property 

512 def managed_memory(self) -> bool: 

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

514 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY)) 2,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf!y

515  

516 @property 

517 def multi_gpu_board(self) -> bool: 

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

519 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD)) 2nz

520  

521 @property 

522 def multi_gpu_board_group_id(self) -> int: 

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

524 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID) 2oz

525  

526 @property 

527 def host_native_atomic_supported(self) -> bool: 

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

529 return bool( 2;x

530 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED) 2;x

531 ) 

532  

533 @property 

534 def single_to_double_precision_perf_ratio(self) -> int: 

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

536 return self._get_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO) 2)A

537  

538 @property 

539 def pageable_memory_access(self) -> bool: 

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

541 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS)) 2tz

542  

543 @property 

544 def concurrent_managed_access(self) -> bool: 

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

546 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS)) 24e5e6e7e8e9e,eMo-e.e/e:e;e=e?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfVycfnndf8lsl9lCl!lDltl#l$lBk#kUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz.lMl

547  

548 @property 

549 def compute_preemption_supported(self) -> bool: 

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

551 return bool( 2*x

552 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED) 2*x

553 ) 

554  

555 @property 

556 def can_use_host_pointer_for_registered_mem(self) -> bool: 

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

558 return bool( 25x

559 self._get_cached_attribute( 25x

560 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM 25x

561 ) 

562 ) 

563  

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

565  

566 @property 

567 def cooperative_launch(self) -> bool: 

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

569 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH)) 2Wyn

570  

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

572  

573 @property 

574 def max_shared_memory_per_block_optin(self) -> int: 

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

576 return self._get_cached_attribute( 2[x

577 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN 2[x

578 ) 

579  

580 @property 

581 def pageable_memory_access_uses_host_page_tables(self) -> bool: 

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

583 return bool( 2Tp

584 self._get_cached_attribute( 2Tp

585 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES 2Tp

586 ) 

587 ) 

588  

589 @property 

590 def direct_managed_mem_access_from_host(self) -> bool: 

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

592 return bool( 20j

593 self._get_cached_attribute( 20j

594 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST 20j

595 ) 

596 ) 

597  

598 @property 

599 def virtual_memory_management_supported(self) -> bool: 

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

601 return bool( 2%x%k'd(dUp'kxl

602 self._get_cached_attribute( 2%x%k'd(dUp'kxl

603 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2%x%k'd(dUp'kxl

604 ) 

605 ) 

606  

607 @property 

608 def handle_type_posix_file_descriptor_supported(self) -> bool: 

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

610 return bool( 2,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx8xQxRxSxR q r H u

611 self._get_cached_attribute( 2,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx8xQxRxSxR q r H u

612 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED 2,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx8xQxRxSxR q r H u

613 ) 

614 ) 

615  

616 @property 

617 def handle_type_win32_handle_supported(self) -> bool: 

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

619 return bool( 2.x

620 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED) 2.x

621 ) 

622  

623 @property 

624 def handle_type_win32_kmt_handle_supported(self) -> bool: 

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

626 return bool( 29x

627 self._get_cached_attribute( 29x

628 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED 29x

629 ) 

630 ) 

631  

632 @property 

633 def max_blocks_per_multiprocessor(self) -> int: 

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

635 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR) 2(y

636  

637 @property 

638 def generic_compression_supported(self) -> bool: 

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

640 return bool( 2+x

641 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED) 2+x

642 ) 

643  

644 @property 

645 def max_persisting_l2_cache_size(self) -> int: 

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

647 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE) 2,y

648  

649 @property 

650 def max_access_policy_window_size(self) -> int: 

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

652 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE) 2#y

653  

654 @property 

655 def gpu_direct_rdma_with_cuda_vmm_supported(self) -> bool: 

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

657 return bool( 27x

658 self._get_cached_attribute( 27x

659 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED 27x

660 ) 

661 ) 

662  

663 @property 

664 def reserved_shared_memory_per_block(self) -> int: 

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

666 return self._get_cached_attribute( 2jy

667 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK 2jy

668 ) 

669  

670 @property 

671 def sparse_cuda_array_supported(self) -> bool: 

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

673 return bool( 2ky

674 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED) 2ky

675 ) 

676  

677 @property 

678 def read_only_host_register_supported(self) -> bool: 

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

680 return bool( 2iy

681 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED) 2iy

682 ) 

683  

684 @property 

685 def memory_pools_supported(self) -> bool: 

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

687 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED)) 2mqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpKpLpMpNpOpPpQpRpFyGyHyIyJyKy%e4e'gReSe(gAd)g*g+g,g-g'e5e.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6edhVeWeehCdfhghhhihjh)e7ekhXeYelhDdmhnhohphqh*e8ewoZe0erhEdshthuhvhwh+e9exh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhLyMySpIoJozkAkxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAXh,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxlzcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz8h.lsyMl9hwl3eQxRxSxUAR !h#h$h%h'h(h)h*h+h,hId6f7fEg-h.h/hJdFgGg:h;hS T U V W =h?h@h[h]hbgcgdgegfgMeNeOePeQeHgKd8f9fIg^h_h`hLdJgKg{h|h!f#f$f%f'fMd(f)f}h~haiLgMgbicidieifigihi+ , - . / OdPdQdiijikilimiRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: ; = ? @ xiyiziAiBigghgigjgkgOgPgQgRgSgVd.f/fTgCiDiEiWdUgVgFiGi3 4 5 6 7 HiIiJiKiLilgmgngogpgwgxgygzgAgWgXd:f;fXgMiNiOiYdYgZgPiQi=f?f@f[f]fZd^f_fRiSiTi0g1gUiViWiXiYiZi0i` { | } ~ 1d2d3d1i2i3i4i5i4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iabbbcbdbeb)i*i+i,i-iqgrgsgtgugq r H u .i/i:i;i=i3g4g5g6g7g?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsj{B

688  

689 @property 

690 def gpu_direct_rdma_supported(self) -> bool: 

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

692 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED)) 22y'kxl

693  

694 @property 

695 def gpu_direct_rdma_flush_writes_options(self) -> int: 

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

697 return self._get_cached_attribute( 2,x

698 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS 2,x

699 ) 

700  

701 @property 

702 def gpu_direct_rdma_writes_ordering(self) -> int: 

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

704 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING) 2(j

705  

706 @property 

707 def mempool_supported_handle_types(self) -> int: 

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

709 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES) 2.j

710  

711 @property 

712 def deferred_mapping_cuda_array_supported(self) -> bool: 

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

714 return bool( 26x

715 self._get_cached_attribute( 26x

716 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED 26x

717 ) 

718 ) 

719  

720 @property 

721 def numa_config(self) -> int: 

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

723 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_CONFIG) 2rz

724  

725 @property 

726 def numa_id(self) -> int: 

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

728 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_NUMA_ID) 2sz

729  

730 @property 

731 def multicast_supported(self) -> bool: 

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

733 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MULTICAST_SUPPORTED)) 2pz

734  

735 @property 

736 def surface_alignment(self) -> int: 

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

738 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT) 2xz

739  

740 @property 

741 def async_engine_count(self) -> int: 

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

743 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT) 2Ny

744  

745 @property 

746 def can_tex2d_gather(self) -> bool: 

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

748 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER)) 2Qy

749  

750 @property 

751 def maximum_texture2d_gather_width(self) -> int: 

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

753 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH) 2az

754  

755 @property 

756 def maximum_texture2d_gather_height(self) -> int: 

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

758 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT) 2~y

759  

760 @property 

761 def stream_priorities_supported(self) -> bool: 

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

763 return bool( 29j

764 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED) 29j

765 ) 

766  

767 @property 

768 def can_flush_remote_writes(self) -> bool: 

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

770 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES)) 2Oy

771  

772 @property 

773 def host_register_supported(self) -> bool: 

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

775 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED)) 2)j

776  

777 @property 

778 def timeline_semaphore_interop_supported(self) -> bool: 

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

780 return bool( 21j

781 self._get_cached_attribute( 21j

782 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED 21j

783 ) 

784 ) 

785  

786 @property 

787 def cluster_launch(self) -> bool: 

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

789 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH)) 2Ry

790  

791 @property 

792 def can_use_64_bit_stream_mem_ops(self) -> bool: 

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

794 return bool( 2(x

795 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS) 2(x

796 ) 

797  

798 @property 

799 def can_use_stream_wait_value_nor(self) -> bool: 

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

801 return bool( 2)x

802 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR) 2)x

803 ) 

804  

805 @property 

806 def dma_buf_supported(self) -> bool: 

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

808 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED)) 2Yy

809  

810 # Start of CUDA 12 device attributes 

811  

812 @property 

813 def ipc_event_supported(self) -> bool: 

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

815 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_IPC_EVENT_SUPPORTED)) 27y

816  

817 @property 

818 def mem_sync_domain_count(self) -> int: 

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

820 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_SYNC_DOMAIN_COUNT, default=1) 2kz

821  

822 @property 

823 def tensor_map_access_supported(self) -> bool: 

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

825 return bool( 2lytfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f

826 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_TENSOR_MAP_ACCESS_SUPPORTED) 2lytfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0f1f2f3f

827 ) 

828  

829 @property 

830 def handle_type_fabric_supported(self) -> bool: 

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

832 return bool( 2-x

833 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_FABRIC_SUPPORTED) 2-x

834 ) 

835  

836 @property 

837 def unified_function_pointers(self) -> bool: 

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

839 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_FUNCTION_POINTERS)) 2Cz

840  

841 @property 

842 def mps_enabled(self) -> bool: 

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

844 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MPS_ENABLED)) 2mz

845  

846 @property 

847 def host_numa_id(self) -> int: 

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

849 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_ID, default=-1) 2=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmm6ytl4hCg5h=j6h7hDgvk5f$kWm

850  

851 @property 

852 def d3d12_cig_supported(self) -> bool: 

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

854 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_D3D12_CIG_SUPPORTED)) 2Xy

855  

856 @property 

857 def mem_decompress_algorithm_mask(self) -> int: 

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

859 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_ALGORITHM_MASK) 2iz

860  

861 @property 

862 def mem_decompress_maximum_length(self) -> int: 

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

864 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEM_DECOMPRESS_MAXIMUM_LENGTH) 2jz

865  

866 @property 

867 def vulkan_cig_supported(self) -> bool: 

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

869 return bool(self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VULKAN_CIG_SUPPORTED)) 2Dz

870  

871 @property 

872 def gpu_pci_device_id(self) -> int: 

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

874  

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

876 """ 

877 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_DEVICE_ID) 24y

878  

879 @property 

880 def gpu_pci_subsystem_id(self) -> int: 

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

882  

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

884 """ 

885 return self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_GPU_PCI_SUBSYSTEM_ID) 25y

886  

887 @property 

888 def host_numa_virtual_memory_management_supported(self) -> bool: 

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

890 return bool( 2!x

891 self._get_cached_attribute( 2!x

892 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2!x

893 ) 

894 ) 

895  

896 @property 

897 def host_numa_memory_pools_supported(self) -> bool: 

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

899 return bool( 2=x

900 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MEMORY_POOLS_SUPPORTED) 2=x

901 ) 

902  

903 # Start of CUDA 13 device attributes 

904  

905 @property 

906 def host_numa_multinode_ipc_supported(self) -> bool: 

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

908 return bool( 2?x

909 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_NUMA_MULTINODE_IPC_SUPPORTED) 2?x

910 ) 

911  

912 @property 

913 def host_memory_pools_supported(self) -> bool: 

914 """bool: Device supports HOST location with the cuMemAllocAsync and cuMemPool family of APIs.""" 

915 return bool( 2=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmm:x-k+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk/lZp3e0pCk5f.k2x$kWm3x

916 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_MEMORY_POOLS_SUPPORTED) 2=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmm:x-k+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk/lZp3e0pCk5f.k2x$kWm3x

917 ) 

918  

919 @property 

920 def host_virtual_memory_management_supported(self) -> bool: 

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

922 return bool( 2#x

923 self._get_cached_attribute( 2#x

924 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED 2#x

925 ) 

926 ) 

927  

928 @property 

929 def host_alloc_dma_buf_supported(self) -> bool: 

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

931 return bool( 2/x

932 self._get_cached_attribute(driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_HOST_ALLOC_DMA_BUF_SUPPORTED) 2/x

933 ) 

934  

935 @property 

936 def only_partial_host_native_atomic_supported(self) -> bool: 

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

938 return bool( 2$x

939 self._get_cached_attribute( 2$x

940 driver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_ONLY_PARTIAL_HOST_NATIVE_ATOMIC_SUPPORTED 2$x

941 ) 

942 ) 

943  

944  

945class Device: 

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

947  

948 This is a singleton object that helps ensure interoperability 

949 across multiple libraries imported in the process to both see 

950 and use the same GPU device. 

951  

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

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

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

955 this device's context. 

956  

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

958 for a specified device. 

959  

960 Note 

961 ---- 

962 Will not initialize the GPU. 

963  

964 Parameters 

965 ---------- 

966 device_id : int, optional 

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

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

969  

970 """ 

971 __slots__ = ( 

972 "_device_id", 

973 "_memory_resource", 

974 "_has_inited", 

975 "_properties", 

976 "_resources", 

977 "_uuid", 

978 "_context", 

979 "__weakref__", 

980 ) 

981  

982 def __new__(cls, device_id: Device | int | None = None) -> Device: 

983 if isinstance(device_id, Device): 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCFFxAGFyAHFzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:phF]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwDLF9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxzFRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

984 return device_id 2zkAkFFGFHFtyNluy/kvyeAwyxy,p+A-p,A.p/pXm:phF;p=pvg?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqKzLzhqiqjqkqlq|B}B~BaCrl~EukaFbF!kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3h8hsyLFwl'd(dUp'kaEfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC]BzF^B_Bq r

985  

986 Device_ensure_cuda_initialized() 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

987 device_id = Device_resolve_device_id(device_id) 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

988 devices = Device_ensure_tls_devices(cls) 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

989  

990 try: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

991 return devices[device_id] 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

992 except IndexError: 2{E|E

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

994  

995 def _check_context_initialized(self) -> None: 

996 if not self._has_inited: 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpReSeTeUeVeWeXeYeZe0e1e2eSpgEhE|DIoHCICJCJoKCzkAk,kZl0liE1l2l3l4l5l6lFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D8k^k7l_k`k{k|k}k9kSFTFvGwGUFxGyGjEkEVFWFzGAGBGCGDG*AFGGGHGIGJGKGLGMGNGOGPGQGtjRG4xSGlFmFnFoFpFqFrFsFRFTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[GQl]GdF^GPs_G?D`GKzLzfA{GkF|G}G~GaHbHkqlq|B}B~BaClEmEnEoEpEqEalbl}DrEylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEqlcBdBeBfBPogBhBiBjBkBlBmBnB/AYmzl:jgA;kn _AhAiAUx?jcHdHXFeHYFfHgHZF0FhHiHjH1FkH2F3F4F5F6F7F8F9F!FlH#F$F%F'FmH(F)FnHoHpHqH*FrH+FsHtH,F-FuHvHwH.FxH/F:F;F=F?F@F[F]F^FyH_F`F{F|FzH}F~FAHBHCHDHaGEHbGFHGHcGdGHHIHJHeGKHfGgGhGiGjGkGlGmGnGLHoGpGqGrGMHsGtGNHOHukBk!k#k-kLFAlCk5f.kCDEDagAF@j9osntnun#o[j$o]j%ovnwnxn'o6f7fS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y `Aynbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:o4fEkwkxkykFk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Agg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`ock{o0n1n2n|o.f/f3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 3n4nlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgp%jinwmxmymjn:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppq r H u mkqp{n|n}nrpnksp~naobotpokupcodoeovppkwpfogohoxpqkypiojokozprkAplomonoBpskCpoopoqoDptkEprosotoFpFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEVE{DWEXE'xOzYEZE0E1EQF

997 raise CUDAError( 

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

999 ) 

1000  

1001  

1002 @classmethod 

1003 def get_all_devices(cls) -> tuple[Device, ...]: 

1004 """ 

1005 Query the available device instances. 

1006  

1007 Returns 

1008 ------- 

1009 tuple of Device 

1010 A tuple containing instances of available devices. 

1011 """ 

1012 from cuda.core import system 2FzLe#E$EJz-A^AMz'E(E)E*E+E,E-ENz.E/E:E;E=EfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC{B

1013 total = system.get_num_devices() 2FzLe#E$EJz-A^AMz'E(E)E*E+E,E-ENz.E/E:E;E=EfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC{B

1014 return tuple(cls(device_id) for device_id in range(total)) 2FzLe#E$EJz-A^AMz'E(E)E*E+E,E-ENz.E/E:E;E=EfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC{B

1015  

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

1017 """ 

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

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

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

1021  

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

1023  

1024 Returns 

1025 ------- 

1026 cuda.core.system.Device 

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

1028 """ 

1029 from cuda.core.system._system import CUDA_BINDINGS_NVML_IS_COMPATIBLE 2(k

1030  

1031 if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: 2(k

1032 raise RuntimeError( 

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

1034 ) 

1035  

1036 from cuda.core.system import Device as SystemDevice 2(k

1037 return SystemDevice(uuid=self.uuid) 2(k

1038  

1039 @property 

1040 def device_id(self) -> int: 

1041 """Return device ordinal.""" 

1042 return self._device_id 2mqnq%e4e'e5e(e6e)e7e*e8e+e9ezkAklnmn,kFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D3EQHSFTF4EfFTx@ArBRHvGwGUFxGyGgFVFWFOo,pBF+A-p,Aon.ptF[A/puFXm:phF;ptj=pDkvg?p@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!EbqpncqvFwFdqxFqneqyFQlfqdFPsgqKzLzfAhq]Aiqrnjqkqlq|B}B~BaCVpalbl^AVAWCWA/AYmzlUx?j~krl~EukaFbF%EslDl!k#kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3h8hsyLFwlCDED%k'd(dUp'kaE[B:l?E@EagfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxfCgChCiCjCkClCmCnCoCpCqCrCsCtCuC]BzF^B_B@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'j!p#pq r H mknkokpkqkrksktkoB'xOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(HCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVjWjXjYjZjpB)HqBQF

1043  

1044 @property 

1045 def pci_bus_id(self) -> str: 

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

1047 bus_id = handle_return(runtime.cudaDeviceGetPCIBusId(13, self._device_id)) 2-AWC(k

1048 return bus_id[:12].decode() 2-AWC(k

1049  

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

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

1052  

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

1054 device and the specified peer device. 

1055  

1056 Parameters 

1057 ---------- 

1058 peer : Device | int 

1059 The peer device to check accessibility to. Can be a :obj:`~_device.Device` object or device ID. 

1060 """ 

1061 peer = Device(peer) 

1062 cdef int d1 = <int> self.device_id 

1063 cdef int d2 = <int> peer.device_id 

1064 if d1 == d2: 

1065 return True 

1066 cdef int value = 0 

1067 with nogil: 

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

1069 return bool(value) 

1070  

1071 @property 

1072 def uuid(self) -> str: 

1073 """Return a UUID for the device. 

1074  

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

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

1077 subscribed MIG compute instance. 

1078  

1079 Note 

1080 ---- 

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

1082 driver is older than CUDA 11.4. 

1083  

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

1085  

1086 """ 

1087 cdef cydriver.CUuuid uuid 

1088 cdef cydriver.CUdevice dev 

1089 cdef bytes uuid_b 

1090 cdef str uuid_hex 

1091  

1092 if self._uuid is None: 2Tx@ArB,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx-AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1093 dev = self._device_id 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1094 with nogil: 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1095 IF CUDA_CORE_BUILD_MAJOR == 12: 

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

1097 ELSE: # 13.0+ 

1098 HANDLE_RETURN(cydriver.cuDeviceGetUuid(&uuid, dev)) 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1099 uuid_b = cpython.PyBytes_FromStringAndSize(uuid.bytes, sizeof(uuid.bytes)) 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1100 uuid_hex = uuid_b.hex() 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1101 # 8-4-4-4-12 

1102 self._uuid = f"{uuid_hex[:8]}-{uuid_hex[8:12]}-{uuid_hex[12:16]}-{uuid_hex[16:20]}-{uuid_hex[20:]}" 2Tx@ArBk vgm l -AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1103 return self._uuid 2Tx@ArB,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx-AbCbBcCdC(kWAZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1104  

1105 @property 

1106 def name(self) -> str: 

1107 """Return the device name.""" 

1108 # Use 256 characters to be consistent with CUDA Runtime 

1109 cdef int LENGTH = 256 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1110 cdef bytes name = bytes(LENGTH) 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1111 cdef char* name_ptr = name 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1112 cdef cydriver.CUdevice this_dev = self._device_id 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1113 with nogil: 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1114 HANDLE_RETURN(cydriver.cuDeviceGetName(name_ptr, LENGTH, this_dev)) 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1115 name = name.split(b"\0")[0] 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1116 return name.decode() 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWzVAnl

1117  

1118 @property 

1119 def properties(self) -> DeviceProperties: 

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

1121 if self._properties is None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoFCBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^ltj=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVp^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

1122 self._properties = DeviceProperties._init(self._device_id) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lWhXh8k^k7l_k`k{k|k}k9k,e-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfk vgm l 0j(j)j*j+j,joq-j8j.jTp9j/j1jI Blqlb GdHd~AaB:jn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdf~krlLoukYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulFl0h1hGlHl2hvlBgIl3hWxXx%lYx'lZx(l)l0xJl1x4hKlCg*l5h+l,l6h7hLlDg-l8h.l/lMl9hwl3eCk5f.k2x$k3x%k'd(dUp'kxlEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsftfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

1123  

1124 return self._properties 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqzyAyByCyDy8g9g!g#g$g%gEyGpHpIpJpTl$p%pUlVlWlXlYlKpLpMpNpOpPpQpRp'pFyGyHyIyJyKyuovo%e4e8d'gReSe(gAd)g*g+g,g-g'e5e9d.gTeUe/gBd:g;g=g?g@g[g]g^g_g`g{g|g}g~gahbhch(e6e!ddhVeWeehCdfhghhhihjh)e7e#dkhXeYelhDdmhnhohphqh*e8e$dwoZe0erhEdshthuhvhwh+e9e%dxh1e2eyhFdzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVh(pLyMyxo)pSp*pyozoAoFCBoCoDoEoFoGoHoIoJozkAklnmn,kZl0lKo1l2l3l4l5l6lxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWhQARASAXh8k^k7l_k`k{k|k}k9k,eMo-e.e/e:e;e=eDm?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf,p=l-p?l.p@l/p[l:p]l;p^ltj=p4xk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxNoVp^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndf~krlLoukTAYh8lsl9lCl!lDltl#l$lBk!k#k-kElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp9hwl3e0pCk5f.k2x$kWm3x%k'd(dUp'kxlEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#Amy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcQxRxSxUAR !h)d#h$hLc*d%h'hMcNc(h+d)h*hOc,d+h,hPcId6f7fEg-h.h/hJdFgGg:h;hS g T U c h V W d X Y -d.d/d:d;d=h=d?h@h?d[h]hbg) cgdgJ * egfgK Mes NeOeo t PeQep HgKd8f9fIg^h_h`hLdJgKg{h|h!fZ #f$fv 0 %f'fw Md(f)f}h~haiLgMgbicidi@deifi[dgihi+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|djiki0c}dlimi1cRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiziaeAiBigg[ hgigL ] jgkgM OgTdPgQg%cUdRgSg'cVd.f/fTgCiDiEiWdUgVgFiGi3 i 4 5 e j 6 7 f 8 9 becedeeefeHigeIiJiheKiLilg^ mgngN _ ogpgO wg(cxgyg! )czgAg# WgXd:f;fXgMiNiOiYdYgZgPiQi=f$ ?f@fB % [f]fC Zd^f_fRiSiTi0g1gUiViWiieXiYijeZi0i` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipe2i3i@cqe4i5i[c4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i+ise,i-iqgfbrgsgP gbtgugQ q r H u dded.ite/i:ifdue;i=igdhdidjd3g6d4g5gkd7d6g7gld?ive@i[imdwe]i^ind_ixe`i{iodye|i}ipd~izeajbjqdAecjdjrdejBefjgjsdCehjijtdjjDekjljudEemjnjvdwdojFepjqjxdGerjsjydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC{BtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f

1125  

1126 @property 

1127 def resources(self) -> DeviceResources: 

1128 """Return the hardware resource query namespace for this device.""" 

1129 if self._resources is None: 2Qoujvjb GdHdwjxjyjzjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o

1130 self._resources = DeviceResources._init(self._device_id) 2Qoujvjb GdHdwjxjyjzjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o

1131 return self._resources 2Qoujvjb GdHdwjxjyjzjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o

1132  

1133 @property 

1134 def compute_capability(self) -> ComputeCapability: 

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

1136 cdef DeviceProperties prop = self.properties 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoFCBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz8k^k7l_k`k{k|k}k9ktj4xNoVpI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwCHeIeJeKe

1137 cached = prop._cache.get("compute_capability") 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoFCBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz8k^k7l_k`k{k|k}k9ktj4xNoVpI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwCHeIeJeKe

1138 if cached is not None: 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoFCBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz8k^k7l_k`k{k|k}k9ktj4xNoVpI Blqlb GdHd~AaB:jn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwCHeIeJeKe

1139 return cached 2a FCtyNluy/kvyeAwyxyGzHzIztj4xNoqlb GdHd2C5C_AXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`bID{bJD|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcscKDtcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcc d J K o p v w + QcRc, x y - ScTcUcVcWc. / XcYcZcNd0c1c: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cL M Td%cUd'ce f N O ! # B C ` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d@c[cab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdP Q ddedfdgdhdidjd6dkd7dldmdndodpdqdrdsdtdudvdwdxdydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC

1140 cc = ComputeCapability(prop.compute_capability_major, prop.compute_capability_minor) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe

1141 return prop._cache.setdefault("compute_capability", cc) 2a ~f=k?kGkHkRlIkSl@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kTl$p%pUlVlWlXlYl'puovo8dAd9dBd!dCd#dDd$dEd%dFd(pxo)p*pyozoAoBoCoDoEoFoGoHozkAklnmn,kZl0lKo1l2l3l4l5l6lNl/k8k^k7l_k`k{k|k}k9k4xNoVpI Blqlb GdHd~AaB:jn hbibjbOlkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRbSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3b4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUmgfhfifjfkflfmfnfVmofpfqfrfsfHeIeJeKe

1142  

1143 @property 

1144 def arch(self) -> str: 

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

1146 return f"{self.compute_capability.major}{self.compute_capability.minor}" 2a tyNluy/kvyeAwyxyGzHzIzNoqlb GdHd_AeCkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbEmQbRb[BSb:lTbUbVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8b!A#A9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcc d J K o p v w + QcRc, x y - ScTcUcVcWc. / XcYcZc0c1c: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cL M %c'ce f N O ! # B C ` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c@c[cab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdP Q ddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC

1147  

1148 @property 

1149 def context(self) -> Context: 

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

1151  

1152 Note 

1153 ---- 

1154 Device must be initialized. 

1155  

1156 """ 

1157 self._check_context_initialized() 29o%obg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oEkqmhn{olg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpinzmknqpspupwpypApCpEp

1158 return self._context 29o%obg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oEkqmhn{olg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpinzmknqpspupwpypApCpEp

1159  

1160 @property 

1161 def memory_resource(self) -> MemoryResource: 

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

1163 cdef int attr, device_id 

1164 if self._memory_resource is None: 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZjpBqBQF

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

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

1167 device_id = self._device_id 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB

1168 with nogil: 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB

1169 HANDLE_RETURN( 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB

1170 cydriver.cuDeviceGetAttribute( 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB

1171 &attr, cydriver.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, device_id 

1172 ) 

1173 ) 

1174 if attr == 1: 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB

1175 from cuda.core._memory import DeviceMemoryResource 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB

1176 self._memory_resource = DeviceMemoryResource(self._device_id) 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwACjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZjpBqB

1177 else: 

1178 from cuda.core._memory._legacy import _SynchronousMemoryResource 

1179 self._memory_resource = _SynchronousMemoryResource(self._device_id) 

1180  

1181 return self._memory_resource 2albl/AYmzlUx?jag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk'xOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZjpBqBQF

1182  

1183 @memory_resource.setter 

1184 def memory_resource(self, mr: MemoryResource) -> None: 

1185 from cuda.core._memory import MemoryResource 

1186 assert_type(mr, MemoryResource) 

1187 self._memory_resource = mr 

1188  

1189 @property 

1190 def default_stream(self) -> Stream: 

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

1192  

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

1194 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

1195  

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

1197 the legacy stream. 

1198  

1199 """ 

1200 return default_stream() 2zkAkSFTF*H!eUF#e$eVFWFzGAGBGCGDG+A,AontF[AuFXmhF+H,HDk2E-H5E.H6E/H7E:H8E;H9E=H!E?H@H[H]H^H_H`H{H|H}H~HaIpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFkqlq|B}B~BaCalblXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zUx?j~krlukslClBk!k#k-kulPlvlBgXpJlKlCgLlDgsyMlZpLFwl3e0pCk5f.kag@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jq r mknkokpkqkrksktk[EOzjAkAlAmAnAoApAqArAsAtAuAvAwAEGCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZjpBqBQF

1201  

1202 def __int__(self) -> int: 

1203 """Return device_id.""" 

1204 return self._device_id 2IFJFKF3Ealbl

1205  

1206 def __repr__(self) -> str: 

1207 return f"<Device {self._device_id} ({self.name})>" 2TxOoBF+A,AontF[AuFXmhFtj4xlFmFnFoFpFqFrFsFDk2EpnvFwFxFqnyFQldFPs?DKzLzfAkF]ADFrnEFWznl

1208  

1209 def __hash__(self) -> int: 

1210 return hash(self.uuid) 2Tx@ArB,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxbCbBcCdCZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR dlMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlq r H u olpl*k+k

1211  

1212 def __eq__(self, other: object) -> bool: 

1213 if not isinstance(other, Device): 2Tx@A,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx_EbB`E}EZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR !owg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pq r u *k+k{D

1214 return NotImplemented 2Tx@A}E!owg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9p{D

1215 return self._device_id == other._device_id 2Tx,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxvg;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql gqjmIxJxhqkmiqlmjqmmKxLxMxNxOxPx_EbB`EZhPl0h1hnm2hBg3h4hCg5h=j6h7hDgvk8h5f$kWmQxRxSxR !oq r u *k+k

1216  

1217 def __reduce__(self) -> tuple[object, ...]: 

1218 return Device, (self.device_id,) 2OoBF+A,AontF[AuFXmhFtjDk5E6E7E8E9E!EpnvFwFxFqnyFQldFPsKzLzfA]Arnkqlq|B}B~BaC!p#p

1219  

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

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

1222  

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

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

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

1226  

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

1228  

1229 Parameters 

1230 ---------- 

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

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

1233  

1234 Returns 

1235 ------- 

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

1237 Popped context. 

1238  

1239 Examples 

1240 -------- 

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

1242 calling this method, e.g. 

1243  

1244 >>> from cuda.core import Device 

1245 >>> dev0 = Device(0) 

1246 >>> dev0.set_current() 

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

1248  

1249 """ 

1250 cdef ContextHandle h_context 

1251 cdef cydriver.CUcontext prev_ctx, curr_ctx 

1252 cdef Context prev_owned = None 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHd]Ewjxjyj$szj^EAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1253  

1254 if ctx is not None: 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHd]Ewjxjyj$szj^EAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1255 # TODO: revisit once Context is cythonized 

1256 assert_type(ctx, Context) 2]E^E

1257 if ctx._device_id != self._device_id: 2]E^E

1258 raise RuntimeError( 

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

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

1261 ) 

1262 if self._has_inited and self._context is not None: 2]E^E

1263 prev_owned = self._context 2]E^E

1264 # prev_ctx is the previous context 

1265 curr_ctx = as_cu(ctx._h_context) 2]E^E

1266 prev_ctx = NULL 2]E^E

1267 with nogil: 2]E^E

1268 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&prev_ctx)) 2]E^E

1269 HANDLE_RETURN(cydriver.cuCtxPushCurrent(curr_ctx)) 2]E^E

1270 self._has_inited = True 2]E^E

1271 self._context = ctx # Store owning context reference 2]E^E

1272 if prev_ctx != NULL: 2]E^E

1273 if prev_owned is not None and as_cu(prev_owned._h_context) == prev_ctx: 2]E^E

1274 return prev_owned 2]E^E

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

1276 else: 

1277 # use primary ctx 

1278 h_context = get_primary_context(self._device_id) 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1279 if h_context.get() == NULL: 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

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

1281 with nogil: 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1282 HANDLE_RETURN(cydriver.cuCtxSetCurrent(as_cu(h_context))) 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1283 self._has_inited = True 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1284 self._context = Context._from_handle(Context, h_context, self._device_id) # Store owning context 2yCpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqDCTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAWhQARASAMCXhDsEsFsGsHsIsJsKsLs,eMoMs-e.e/e:e;e=eDmNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbf*AOs,p=l-p?l.p@l/p[l:p]l;p^l=pk xxyxzxAxBxCxDxExFxGxHxDkvg2E;j?p_l@p[p]p^p_p`p{p|p}p~paqbq`l{l|l}l~lambmcmdmm emfmcqgmdqhmeqimfql Psgq?DjmIxJxhqkmiqlmjqmmKxLxMxNxOxPxQsNCRsSsTsUsVsalblOCWsPCQCRCXsSC^ATCUCWz.AVCYsylI )kZscl0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 3C4C6C7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zkblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krlLouk%CTAYh)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`C{CXp|C}C%l@s[s'l~CaD(lbDcD)l]s^sJl_sdDYpeDfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.katzDADBDDDFD%k'd(dGD'kxlbtQbRbHDSbctTbUbVbdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKc]BQxzFRx^BSxAFUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v`B8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@voB0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.w/w:w;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1285  

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

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

1288  

1289 Note 

1290 ---- 

1291 The newly created context will not be set as current. 

1292  

1293 Parameters 

1294 ---------- 

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

1296 Customizable dataclass for context creation options. 

1297  

1298 Returns 

1299 ------- 

1300 :obj:`~_context.Context` 

1301 Newly created context object. 

1302  

1303 """ 

1304 cdef int i 

1305 cdef object resources 

1306 cdef object res 

1307 cdef SMResource sm_res 

1308 cdef WorkqueueResource wq_res 

1309 cdef GreenCtxHandle h_green 

1310  

1311 if options is None: 2eFujvjb YmzlwjxjyjzjAjBjCFuG

1312 raise ValueError( 2uG

1313 "options with device resources must be provided to create a green context" 

1314 ) 

1315  

1316 options = check_or_create_options(ContextOptions, options, "Context options") 2eFujvjb YmzlwjxjyjzjAjBjCFuG

1317 if options.resources is None: 2eFujvjb YmzlwjxjyjzjAjBjCFuG

1318 raise ValueError( 2uG

1319 "ContextOptions.resources must be provided to create a green context" 

1320 ) 

1321  

1322 resources = tuple(options.resources) 2eFujvjb YmzlwjxjyjzjAjBjCF

1323 if len(resources) == 0: 2eFujvjb YmzlwjxjyjzjAjBjCF

1324 raise ValueError("ContextOptions.resources must not be empty") 

1325  

1326 cdef vector[cydriver.CUdevResource] c_resources 

1327 c_resources.resize(len(resources)) 2eFujvjb YmzlwjxjyjzjAjBjCF

1328  

1329 for i, res in enumerate(resources): 2eFujvjb YmzlwjxjyjzjAjBjCF

1330 if isinstance(res, SMResource): 2eFujvjb YmzlwjxjyjzjAjBjCF

1331 sm_res = <SMResource>res 2eFujvjb YmzlwjxjyjzjAjBjCF

1332 if not sm_res._is_usable: 2eFujvjb YmzlwjxjyjzjAjBjCF

1333 raise ValueError("dry-run SMResource objects cannot be used to create a context") 2CF

1334 c_resources[i] = sm_res._resource 2eFujvjb YmzlwjxjyjzjAjBj

1335 elif isinstance(res, WorkqueueResource): 2zl

1336 wq_res = <WorkqueueResource>res 2zl

1337 c_resources[i] = wq_res._wq_config_resource 2zl

1338 else: 

1339 raise TypeError(f"Unsupported context resource type: {type(res)}") 

1340  

1341 h_green = create_green_ctx_handle( 2eFujvjb YmzlwjxjyjzjAjBj

1342 c_resources.data(), 

1343 <unsigned int>(c_resources.size()), 

1344 <cydriver.CUdevice>(self._device_id), 2eFujvjb YmzlwjxjyjzjAjBj

1345 <unsigned int>(cydriver.CUgreenCtxCreate_flags.CU_GREEN_CTX_DEFAULT_STREAM), 

1346 ) 

1347 if h_green.get() == NULL: 2eFujvjb YmzlwjxjyjzjAjBj

1348 HANDLE_RETURN(get_last_error()) 

1349 raise RuntimeError("Failed to create CUDA green context") 

1350  

1351 return Context._from_green_ctx(Context, h_green, self._device_id) 2eFujvjb YmzlwjxjyjzjAjBj

1352  

1353 def create_stream(self, obj: IsStreamType | None = None, options: object = None) -> Stream: 

1354 """Create a :obj:`~_stream.Stream` object. 

1355  

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

1357  

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

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

1360  

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

1362 such that the lifetime is managed. 

1363  

1364 Note 

1365 ---- 

1366 Device must be initialized. 

1367  

1368 Parameters 

1369 ---------- 

1370 obj : :obj:`~_stream.IsStreamType`, optional 

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

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

1373 Customizable dataclass for stream creation options. 

1374  

1375 Returns 

1376 ------- 

1377 :obj:`~_stream.Stream` 

1378 Newly created stream object. 

1379  

1380 """ 

1381 self._check_context_initialized() 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpSpgEhEICJCzkAk,kZl0liE1l2l3l4l5l6lFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D8k^k7l_k`k{k|k}k9kSFTFvGwGUFxGyGjEkEVFWFzGAGBGCGDG*Atj4xlFmFnFoFpFqFrFsFRFTGUGQldFPs?DKzLzfAkFkqlq|B}B~BaClEmEnEoEpEqErEylI )ksEtEuEvEwExEBlyEzEAEBECEDEEEqlcBdBeBfBPogBhBiBjBkBlBmBnB:jgA;kn _AhAiAcHdHXFeHYFfHgHZF0FhHiHjH1FkH2F3F4F5F6F7F8F9F!FlH#F$F%F'FmH(F)FnHoHpHqH*FrH+FsHtH,F-FuHvHwH.FxH/F:F;F=F?F@F[F]F^FyH_F`F{F|FzH}F~FAHBHCHDHaGEHbGFHGHcGdGHHIHJHeGKHfGgGhGiGjGkGlGmGnGLHoGpGqGrGMHsGtGNHOHukBkAlCkCDEDagAF#o$o'oFkgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o|ojnqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppH u rptpvpxpzpBpDpFpFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEVE{DWEXE'xOzYEZE0E1EQF

1382 return Stream._init(obj=obj, options=options, device_id=self._device_id, ctx=self._context) 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpSpgEhEICJCzkAk,kZl0liE1l2l3l4l5l6lFFGFHFNFOFPFtyNluy/kvyeAwyxyGzHzIzIFJFKF@D[D]D8k^k7l_k`k{k|k}k9kSFTFvGwGUFxGyGjEkEVFWFzGAGBGCGDG*Atj4xlFmFnFoFpFqFrFsFRFTGUGQldFPs?DKzLzfAkFkqlq|B}B~BaClEmEnEoEpEqErEylI )ksEtEuEvEwExEBlyEzEAEBECEDEEEqlcBdBeBfBPogBhBiBjBkBlBmBnB:jgA;kn _AhAiAcHdHXFeHYFfHgHZF0FhHiHjH1FkH2F3F4F5F6F7F8F9F!FlH#F$F%F'FmH(F)FnHoHpHqH*FrH+FsHtH,F-FuHvHwH.FxH/F:F;F=F?F@F[F]F^FyH_F`F{F|FzH}F~FAHBHCHDHaGEHbGFHGHcGdGHHIHJHeGKHfGgGhGiGjGkGlGmGnGLHoGpGqGrGMHsGtGNHOHukBkAlCkCDEDagAF#o$o'oFkgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o|ojnqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppH u rptpvpxpzpBpDpFpFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEVE{DWEXE'xOzYEZE0E1EQF

1383  

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

1385 """Create an :obj:`~_event.Event` object without recording it to a :obj:`~_stream.Stream`. 

1386  

1387 Note 

1388 ---- 

1389 Device must be initialized. 

1390  

1391 Parameters 

1392 ---------- 

1393 options : :obj:`EventOptions`, optional 

1394 Customizable dataclass for event creation options. 

1395  

1396 Returns 

1397 ------- 

1398 :obj:`~_event.Event` 

1399 Newly created event object. 

1400  

1401 """ 

1402 self._check_context_initialized() 2ECReSeTeUeVeWeXeYeZe0e1e2e|DIoHCICJCJoKC,kRF}D)k~DclXCsntnunvnwnxn6f7f2j3jX Y `Aynompmwkxkyk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Armsmtm0n1n2n.f/f5j6j8 9 3n4numvmwmxmym:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nAmBmCm{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto

1403 cdef Context ctx = self._context 2ECReSeTeUeVeWeXeYeZe0e1e2e|DIoHCICJCJoKC,kRF}D)k~DclXCsntnunvnwnxn6f7f2j3jX Y `Aynompmwkxkyk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Armsmtm0n1n2n.f/f5j6j8 9 3n4numvmwmxmym:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nAmBmCm{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto

1404 return cyEvent._init(cyEvent, self._device_id, ctx._h_context, options, True) 2ECReSeTeUeVeWeXeYeZe0e1e2e|DIoHCICJCJoKC,kRF}D)k~DclXCsntnunvnwnxn6f7f2j3jX Y `Aynompmwkxkyk8f9f!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUn(f)fVnWnx y 1 2 XnYn*f+f,f-fz A Zn{Armsmtm0n1n2n.f/f5j6j8 9 3n4numvmwmxmym:f;f=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?n^f_f@n[nD E ' ( ]n^n`f{f|f}fF G _n`nAmBmCm{n|n}n~naobocodoeofogohoiojokolomonooopoqorosoto

1405  

1406 def allocate(self, size: int, *, stream: Stream | GraphBuilder) -> Buffer: 

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

1408  

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

1410 using the memory resource currently associated with this Device. 

1411  

1412 Note 

1413 ---- 

1414 Device must be initialized. 

1415  

1416 Parameters 

1417 ---------- 

1418 size : int 

1419 Number of bytes to allocate. 

1420 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

1421 Keyword-only. The stream establishing the stream ordering semantic. 

1422 Must be passed explicitly; pass ``self.default_stream`` to use 

1423 the default stream. 

1424  

1425 Returns 

1426 ------- 

1427 :obj:`~_memory.Buffer` 

1428 Newly created buffer object. 

1429  

1430 """ 

1431 self._check_context_initialized() 2albl/AYmzlUx?j@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk

1432 return self.memory_resource.allocate(size, stream=stream) 2albl/AYmzlUx?j@j[j]jS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbk!j4f4j#jck3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk$j%j7j'jmknkokpkqkrksktk

1433  

1434 def sync(self) -> None: 

1435 """Synchronize the device. 

1436  

1437 Note 

1438 ---- 

1439 Device must be initialized. 

1440  

1441 """ 

1442 self._check_context_initialized() 2FGGGHGIGJGKGLGMGNGOGPGQGRGSGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`GKzLz{G|G}G~GaHbHkqlq|B}B~BaCalblgA;khAiAXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGukBk!k#k-kLFCk5f.kq r

1443 handle_return(runtime.cudaDeviceSynchronize()) 2FGGGHGIGJGKGLGMGNGOGPGQGRGSGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`GKzLz{G|G}G~GaHbHkqlq|B}B~BaCalblgA;khAiAXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGukBk!k#k-kLFCk5f.kq r

1444  

1445 def create_graph_builder(self) -> GraphBuilder: 

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

1447  

1448 Returns 

1449 ------- 

1450 :obj:`~graph.GraphBuilder` 

1451 Newly created graph builder object. 

1452  

1453 """ 

1454 from cuda.core.graph._graph_builder import GraphBuilder 2xCzC=k?kGkACHkBCIkCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kFFGFHFNFOFPFtyuy/kvywyxyGzHzIzIFJFKF@D[D]D8k^k_k`k{k|k}k9k'x

1455  

1456 self._check_context_initialized() 2xCzC=k?kGkACHkBCIkCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kFFGFHFNFOFPFtyuy/kvywyxyGzHzIzIFJFKF@D[D]D8k^k_k`k{k|k}k9k'x

1457 return GraphBuilder._init(self.create_stream()) 2xCzC=k?kGkACHkBCIkCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kFFGFHFNFOFPFtyuy/kvywyxyGzHzIzIFJFKF@D[D]D8k^k_k`k{k|k}k9k'x

1458  

1459  

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

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

1462 global _is_cuInit 

1463 if _is_cuInit is False: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1464 with _lock, nogil: 

1465 HANDLE_RETURN(cydriver.cuInit(0)) 

1466 _is_cuInit = True 

1467 try: 

1468 from cuda.bindings.utils import warn_if_cuda_major_version_mismatch 

1469 except ImportError: 

1470 pass 

1471 else: 

1472 warn_if_cuda_major_version_mismatch() 

1473 return 0 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1474  

1475  

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

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

1478 cdef cydriver.CUdevice dev 

1479 cdef cydriver.CUcontext ctx 

1480 cdef cydriver.CUresult err 

1481 if device_id is None: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtMFQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1482 with nogil: 2a ~fxCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqENoVpalbl}DrE^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgA;kn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZpfn@BgnAlwl3e0pCk5f.k2x$kWm3xCDED%k'd(dUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwACjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj

1483 err = cydriver.cuCtxGetDevice(&dev) 2a ~fxCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqENoVpalbl}DrE^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgA;kn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZpfn@BgnAlwl3e0pCk5f.k2x$kWm3xCDED%k'd(dUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwACjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj

1484 if err == cydriver.CUresult.CUDA_SUCCESS: 2a ~fxCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqENoVpalbl}DrE^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )k~DclXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgA;kn 2C5C_AXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZpfn@BgnAlwl3e0pCk5f.k2x$kWm3xCDED%k'd(dUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbefFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmffRmSmTmUm|Agfhfif}AjfkflfmfnfVmofpfqfrfsfvCVxwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwACjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj

1485 return int(dev) 2xCbEcEzC=k?kGkACHkRlBCIkSlCC@k[k]kJkKkLkMkNkOkPkQkRkSkTkUkVkWk;lXkYkZk0k1k2k3k4k5k6k7kmqnqdEGpHpIpJpTlECeEfEUlVlWlXlYlKpLpMpNpOpPpQpRpuovo%e4e8dReSeAd'e5e9dTeUeBd(e6e!dVeWeCd)e7e#dXeYeDd*e8e$dZe0eEd+e9e%d1e2eFdxoSpyozoAoFCBoCoDoEoFoGogEhEHo|DIoHCICJCJoKCzkAklnmn,kZl0lKoiE1l2l3l4l5l6ltyNluy/kvyeAwyxyGzHzIz3E8k^k7l_k`k{k|k}k9k,eMo4E-e.e/e:e;e=eDm?e!eLe@e#ejE[ekE$e]e^e_e`e{e|e}e~eafbf*A=l?l@l[l]l^lk ;j_l`l{l|l}l~lambmcmdmm emfmgmhmiml jmkmlmmmlEmEnEoEpEqE}DrE~DXCsEtEuEvEwExEBlyEzEAEBECEDEEEql:jgAn 2C5C_AXzYzZz0z1z2z3z4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfhAiAsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B~krluk%E8lsl9lCl!lDltl#l$lBk!k#k-kcFElZhulPlFl0hWp1hGlnmHl2hvlBgIl3hUzWxXpXx%lYx'lZx(lPz)l0xJl1xYpQz+p4hKlCg*l5h+l=j,l6hVz7hLlDg-lvk8h.l/lsyMlZp@Bwl0pCk5f.k2x$kWm3xCDED%kUp'kxlEmQbaERb[BSb:lTb?EUb@EVbagWbFmGmHmImJmKmLmMmNmOmXbYbZb0b1b2b3byy4b5b6b7b8bmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc)dLc*dMcNc+dOc,dPcIdJdg c h d X Y -d.d/d:d;d=d?d) J * K s o t p KdLdZ v 0 w Md@d[d+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{d|d0c}d1cRdSd: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$c~dae[ L ] M Td%cUd'cVdWdi e j f 8 9 becedeeefegehe^ N _ O (c! )c# XdYd$ B % C Zdieje` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoepe@cqe[c4d5dab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcdresefbP gbQ ddedtefduegdhdidjd6dkd7dldvemdwendxeodyepdzeqdAerdBesdCetdDeudEevdwdFexdGeydzdPmQmRmSmTmUmVmvCwC`B[EFE_DGEHEIEJE`DKELEMENEOEPEQERESETEUEoBVE{DWEXEtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe1f2f3f'xOzYEZE0E1EjAkAlAmAnAoApAqArAsAtAuAvAwAXAYAZA0A1A2A3A4A5A6A7A8A9A=A?A

1486 elif err == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

1487 with nogil: 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj

1488 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj

1489 assert <void*>(ctx) == NULL 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj

1490 return 0 # cudart behavior 2a ~fNoVpalbl^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEz.AVAWC(kWAylI )kcl;kn hbibjbZm0m1m2m3m:A4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m;A^m_m`m{m|m}m~manbncndnenfngnAl3e'd(defff|Agfhfif}AjfkflfmfnfofpfqfrfsfVxCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj

1491 else: 

1492 HANDLE_RETURN(err) 

1493 elif device_id < 0: 2a yCpqqqrqsqtqGkuqvqHkwqxqyqIkzqAqBqCqDqEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)q*q+q,qGp-qHp.qIp/qJp:q;q=q?q@q$p[q%p]q^q_q`q{q|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKyprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(r)r)p*r+rSp,r*p-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasIobsHCcsdsesJofsKCgszkhsAkisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSAMCXh8kDsEsFsGsHsIsJsKs9kLs,eMoMsfF-eTx.e@A/erB:e;e=eNs?e!eLe@e#e[e$e]egF^e_e`e{e|e}e~eafbfOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AQsNCRsSsTsUsVsalblOCWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUCWzdCVC}EYsZsXC0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%sn 3C4C6C7Ckblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfUx?j's9C!C#C(s$C~k~ELo%CMzaFTAbFYh)s'C*s+s(C)C*C,s+C-s,C.s-C.C/C/s:C:s;C=C?C;s@C=s[C?s]C^C_C`C{C|C}C@s[s~CaDbDcD]s^s_sdDeDfDgD`s{shDiDjD|skD}slDmDnD~soDpDqDrDsDtDuDvDwD9hxDyDatzDADBDCDDDEDFD%kGD'E(E)E*E+E,E-ENz.E/E:E;E=EbtMFQbaERbHDSbctTbUbVbagdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v{B8v9v!v_D#v$v%v'v(v`D)v*v+v,v-v.v/v:v;v=v?v@v0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwhwiwjwkwlwmwnwowjFpwqwrwswtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

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

1495 return device_id 2a yCpqqqrqsqtqGkuqvqHkwqxqyqIkzqAqBqCqDqEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)q*q+q,qGp-qHp.qIp/qJp:q;q=q?q@q$p[q%p]q^q_q`q{q|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKyprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(r)r)p*r+rSp,r*p-r.r/r:rGC;r=r?r@r[r]r^r_r`r{r|r}r~rasIobsHCcsdsesJofsKCgszkhsAkisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSAMCXh8kDsEsFsGsHsIsJsKs9kLs,eMoMsfF-eTx.e@A/erB:e;e=eNs?e!eLe@e#e[e$e]egF^e_e`e{e|e}e~eafbfOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AQsNCRsSsTsUsVsalblOCWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUCWzdCVC}EYsZsXC0sYC1s2s3s4s5s6sZC7s8s0C1C9s!s#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%sn 3C4C6C7Ckblbmbnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfUx?j's9C!C#C(s$C~k~ELo%CMzaFTAbFYh)s'C*s+s(C)C*C,s+C-s,C.s-C.C/C/s:C:s;C=C?C;s@C=s[C?s]C^C_C`C{C|C}C@s[s~CaDbDcD]s^s_sdDeDfDgD`s{shDiDjD|skD}slDmDnD~soDpDqDrDsDtDuDvDwD9hxDyDatzDADBDCDDDEDFD%kGD'E(E)E*E+E,E-ENz.E/E:E;E=EbtQbaERbHDSbctTbUbVbagdtWbetftgthtitjtktltmtntXbYbZb0b1b2b3byy4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvevfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvRDSvTvUvSDTDVvWvXvYvUDZvVD0vWD1vVx2v3v4vXDYD5vZD6v7v{B8v9v!v_D#v$v%v'v(v`D)v*v+v,v-v.v/v:v;v=v?v@v0D[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwhwiwjwkwlwmwnwowjFpwqwrwswtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1496  

1497  

1498cdef inline list Device_ensure_tls_devices(cls): 

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

1500 cdef int total 

1501 try: 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1502 return _tls.devices 2a ~fxCyCbEpqcEqqzCrq=ksq?ktqGkuqACvqHkwqRlxqBCyqIkzqSlAqCCBq@kCq[kDq]kEqJkFqKkGqLkHqMkIqNkJqOkKqPkLqQkMqRkNqSkOqTkPqUkQqVkRqWkSq;lDCXkTqYkUqZkVq0kWq1kXq2kYq3kZq4k0q5k1q6k2q7k3qmq4qnq5qzy6q7qFzAy8q9qBy!qCy#qDy$q8g9g!g%q#g$g%gEy'q(q)qdE*q+q,qGp-qHp.qIp/qJp:qTl;qEC=qeE?qfE@q$p[q%p]qUl^qVl_qWl`qXl{qYl|qKp}qLp~qMparNpbrOpcrPpdrQperRpfr'pgrhrirjrFykrGylrHymrIynrJyorKypruoqrvorr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dwoZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r(p%rLy'rMy(rxo)r)p*r+rSp,r*p-ryo.rzo/rAo:rFCGCBo;rCo=r?r@r[r]rDo^rEo_rFo`rGo{rgE|rhE}rHo~r|DasIobsHCcsICdsJCesJofsKCgszkhsAkislnjsmnks,klsZlms0lnsKoosiEpsqs1lrs2lss3lts4lus5lvswsxsyszs6lAsBsCsLCxAyAzAAABACAtyDANlEAuyFA/kGAvyHAeAIAwyJAxyKAGzLAHzMAIzNAOAPAWh@DQA[DRA]DSA3EMCXh8kDs^kEs7lFs_kGs`kHs{kIs|kJs}kKs9kLs,eMo4EMsfF-eTx.e@A/erB:e;e=eDmNs?e!eLe@e#ejE[ekE$e]egF^e_e`e{e|e}e~eafbf*AOsOo,p=l+A-p,A?lon.p@l[A/p[lXm:p]l;p^ltj=pk xxyxzxAxBxCxDxExFxGxHxDkvg;j?p_l@p5E[p]p6E^p_p7E`p{p8E|p}p9E~paq!Ebq`l{l|l}l~lambmcmdmm emfmpncqgmdqhmqneqimQlfql #E$EJzPsgqjmKzIxLzJxfAhqkm]AiqlmrnjqmmkqKxlqLx|BMx}BNx~BOxaCPx-AlEQsmENCnERsoESspETsqEUsVsNoVpalbl}DOCrEWsbCPC_EQCbBRC`EXscCSC^A{ETC|EUC^DNyOyPyQy(x5x)x$ARySyTy%A*xUyVyWyXy6x0jYyZy+x0y1y,x2y7x(j3y4y5y-x8x.x9x/x:x;x6y=x?x!x)j#x*j7y'A8y9y!y#y$y%y'y(y)y*y+y,y-y.y@x/y[x]x:y;y^x=y?y@y_x`x[y]y^y_y`y{x|x{y}x+j|y~x}y~yaz,jaybyoqbzczdzcydy-jezeyfzfygz8jgyhyhzizjzkz(Alz.jmznzozpzqzrzsz$xtzTpuzvzwziyjy)Aky9jxz/jlyyzzz1jAzBzCz%xDzEzWz.AdCVC}EYsVAWC(kWAylI )k~DZsclXC0ssEYCtE1suE2svE3swE4sxE5sBl6syEZCzE7sAE8sBE0CCE1CDE9sEE!sql#scBdBeBfBPogBhBiBjBkBlBmBnBQoujvj/Ab YmGdzlHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s:jgA;kn 2C3C4C5C6C_A7CXzYzZzhbib0z1z2z3zjb4z5z6z7zOl8z9z!z#z$z%z'z(z)z*z+z,z-z.z/zeCkblbmb8Cnbobpbqbrbsbtb:kubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfnndfZmhAiA0msBtBuB1mUx?j's9C!C#C(s$CvBwBxByBzBABBBCB2m3mDB:A4mEB5m6mFBGB7mHBIBJBKB8mLB9m!mMBNBOB#mPBQB$m%mRB'mSBTB(m)m*mUBVBWB+mXBYBZB0B,m1B2B-m.m3B4B/m:m;m=m5B6B7B?m@m8B[m9B]m;A^m!B_m#B`m$B%B{m|m}m'B~man(Bbn)B*Bcn+B,Bdn-B.B/B:Ben;B=B?B~krl~ELouk%CMzaFTAbFYh%E)s'C8lsl9l*sCl+s!l(CDl)Ctl*C#l,s$l+CBk-s!k,C#k.s-k-CcFEl.CZh/Cul/sPl:CFl:s0h;CWp=C1h?CGl;snm@CHl=s2h[Cvl?sBg]CIl^C3h_CUz`CWx{CXp|CXx}C%l@sYx[s'l~CZxaD(lbDPzcD)l]s0x^sJl_s1xdDYpeDQzfD+pgD4h`sKl{sCghD*liD5hjD+l|s=jkD,l}s6hlDVzmD7hnDLl~sDgoD-lpDvkqD8hrD.lsD/ltDsyuDMlvDZpwD9hfn@BgnAlwl3e0pxDCkyD5f.k2xat$kzDWmAD3xBDCDDDEDFD%k'd(dUpGD'kxl'E(E)E*E+E,E-ENz.E/E:E;E=EEmbtQbaERb[BHDSb:lctTb?EUb@EVbagdtWbefFmetGmftHmgtImhtJmitKmjtLmktMmltNmmtOmntXbYbZb0b1b2b3byy4b5b6b7b8botptmy9bny!boy#bpy$bqy%bry'bfx(bgx)bhx*bix+bjx,bkx-blx.bmx/bnx:box;bpx=bqx?brx@bsx[btx]bux^bvx_bwx`bID{bJD|bRz}b:z~b;zac=zbc?zcc@zdc[zecSzfc]zgc^zhc_zic`zjc{zkc|zlcTzmc}znc~zocaApcbAqccArcdAscKDtcfCucgCvchCwciCxcjCyckCzclCAcmCBcnCCcoCDcpCEcqCFcrCGcsCHctCIcuCJcKc]BQxRx^BSxUA_BR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#oLDwt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtMDOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?h`Ayn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZn{Azi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvPmcvQmdvffRmevSmfvgvhvivjvkvNDlvmvnvovpvqvrvsvtvuvODPDvvwvxvQDyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvTmNvUmOv|AgfhfifPvQvRvRDSvTvUvSDTDVvWvXvYvUD}AjfkflfmfnfVmZvofpfqfrfsfvCVD0vWD1vVx2v3v4vXDYD5vwCZD6v7v{B`B8v[E9vFE!v_D#vGE$vHE%vIE'vJE(v`D)vKE*vLE+vME,vNE-vOE.vPE/vQE:vRE;vSE=vTE?vUE@voB0DVE[v{D]vWE^vXE_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v1D~vawbwiFcwdw'xewfwOzgwYEhwZEiwjwkwlwmwnw0EowjFpwqwrwsw1EtwuwvwwwxwjAywkAzwlAAwmABwnACwoADwEwpAFwqAGwrAHwsAIwtAJwKwLwuAMwNwOwPwvAQwRwwASwTwUwVwWwXwYwZw0w1w2D3D2w3w4D4w5D5w6w7w8w9w!w#w6D$w%w7D'w(w)w8D*w+w9D,wCjXADjEjYAFjGjHjIjZA0AJj1A2AKj3ALjMj4ANjOj5APj6AQjRjSjTj7AUj8A9AVj=A?AWjXjYjZj!D-w.wpB/w:wqB;w=w#D?w$D@w%D'D(D[w)D*D+D,D]w^w_w`w{w|w-D.D}w~w/Daxbxcx:Ddx;D=Dex

1503 except AttributeError: 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1504 with nogil: 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1505 HANDLE_RETURN(cydriver.cuDeviceGetCount(&total)) 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1506 devices = _tls.devices = [] 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1507 for dev_id in range(total): 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1508 device = super(Device, cls).__new__(cls) 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1509 device._device_id = dev_id 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1510 device._memory_resource = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1511 device._has_inited = False 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1512 device._properties = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1513 device._resources = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1514 device._uuid = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1515 device._context = None 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1516 devices.append(device) 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex

1517 return devices 2a ~fpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7qFz8q9q!q#q$q8g9g!g%q#g$g%g'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrr%e4e8d'gReSe(gsrtrurvrAd)g*g+g,g-gwrxr'e5e9d.gTeUe/gyrzrArBrBd:g;g=g?g@gCrDr[g]g^gEr_g`g{g|g}g~gahbhch(e6e!ddhVeWeehFrGrHrIrCdfhghhhihjhJrKr)e7e#dkhXeYelhLrMrNrOrDdmhnhohphqhPrQr*e8e$dZe0erhRrSrTrUrEdshthuhvhwhVrWr+e9e%dxh1e2eyhXrYrZr0rFdzhAhBhChDh1r2rEhFhGhHhIhJhKhLhMhNhOhPh3rQhRhShThUhVh4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsWhXhDsEsFsGsHsIsJsKsLs,eMs-e.e/e:e;e=eNs?e!eLe@e#e[e$e]e^e_e`e{e|e}e~eafbfOsOoonXmtjk Dkm pnqnQll JzrnkqlqQsRsSsTsUsVsWsXs0j(j)j*j+j,j-j8j.j9j/j1jYs(kylI )kZscl0s1s2s3s4s5s6s7s8s9s!s#sPoQoujvjb GdHdwjxjyj$szjAjBjRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o%s;kn hbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbcfdfZm0m1m?j's(s2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenMzYh)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~s9hfngnAl3eat'd(dNzbtQbRbSbctTbUbVbdtWbefetftgthtitjtktltmtntXbYbZb0b1b2b3b4b5b6b7b8botpt9b!b#b$b%b'b(b)b*b+b,b-b.b/b:b;b=b?b@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcDcEcFcGcHcIcJcKcR !h@j)dqt9o!o#hsntnun$hrtstttutLc*d%h'hMcvt#owt[jNc$o(h]j+dxt%odl)hvnwnxn*hytztAtOc,d+h,hPcBt'oCtDtId6f7fEg-h.h/hJdFgGg:h;hS g ^jT 2j3jU _j`j{j|jc h }jV W d ~jakbkX Y -d.d/d:d;d=h=d?hyn@hEtFtGt?d[h]hHtItJtbg!j) (ocgompmdg)o*o+o,oJ * -oegfgK .o/o:oMe4fs elEkNewkxkykOeflglhlilo t jlPeQep klFkllmlHgKd8f9fIg^h_h`hLdJgKg{h|h!f4jZ znqm#fAnBn$fCnDnEnFnv 0 Gn%f'fw HnInJnKnLnMnNnOnPnQnRnSnTnUnMd(f)f}h~haiLgMgbicidi@dKteiVnWnfiLtMtNt[dgihiOtPtQtRtStTtUtVtWtXtYtZt+ QcRc, x y - ScTcUcVcWc. / XcYcZcNd1 2 Od]d^d_dPdQd`d{dii|d0tjiXnYnki1t2t3t4t0c}dlimi1c5t6t7tRd*f+fnioipiqiriSd,f-fsitiuiNgviwi: 2c3c; z A = 4c5c6c7c8c9c? @ !c#c$cxi~dyiZnzi8t9t!taeAiBi#t$tgg#j[ ;ohnhgrmsmtmig=o?o@o[oL ] ]ojgkgM ^o_o`o%tOgckTd't{o(tPg0n1n2nQg)t*t+t,t%cUdRgSg'c-t|o.t/tVd.f/fTgCiDiEiWdUgVgFiGi3 i dk4 5j6j5 ekfkgkhke j ik6 7 f jkkklk8 9 becedeeefeHigeIi3n4nJi:t;t=theKiLi?t@t[tlg$j^ }omgumvmng~oapbpcpN _ dpogpgO epfpgpwg%j(c1pinxgwmxmymyg2p3p4p5p! )c6pzgAg# 7pjn8p9pWgXd:f;fXgMiNiOiYdYgZgPiQi=f7j$ 5nzm?f6n7n@f8n9n!n#nB % $n[f]fC %n'n(n)n*n+n,n-n.n/n:n;n=n?nZd^f_fRiSiTi0g1gUiViWiie]tXi@n[nYi^t_t`tjeZi0i{t|t}t~taubucudueufuguhu` *c+c{ D E | ,c-c.c/c:c} ~ ;c=c?c0d' ( 1dkeleme2d3dneoe1ipeiu2i]n^n3ijukulumu@cqe4i5i[cnuoupu4d`f{f6i7i8i9i!i5d|f}f#i$i%i2g'i(iab]c^cbbF G cb_c`c{c|c}c~cdbebadbdcd)ire*i_n`n+iqurususe,i-ituuuqg'jfbhpknrgAmBmCmsgipjpkplpP gbmptgugQ npopppvu!p#pq r H u dded.imktewuqpnl/i{n|n}n:ixuyuzuAufdue;i=igdhdBuidjdCuDurpEuFu3gnk6dGuspHu4g~naobo5gIuJuKuLukd7d6g7gldMutpNuOu?iokvePuupol@icodoeo[iQuRuSuTumdwe]i^indUuvpVuWu_ipkxeXuwppl`ifogoho{iYuZu0u1uodye|i}ipd2uxp3u4u~iqkze5uyp*kajiojokobj6u7u8u9uqdAecjdjrd!uzp#u$uejrkBe%uAp+kfjlomonogj'u(u)u*usdCehjijtd+uBp,u-ujjskDe.uCp/ukjoopoqolj:u;u=u?uudEemjnjvdwd@uDp[u]uojtkFe^uEp_upjrosotoqj`u{u|u}uxdGerjsjydzd~uFpavbvcvdvffevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvgfhfifPvQvRvSvTvUvVvWvXvYvjfkflfmfnfZvofpfqfrfsf0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_vtfufvfwfxfyfzfAfBfCfDfEfFfGfHfIfJfKfLfMfNfOfPfQfRfSfTfUfVfWfXfYfZf0fHeIeJeKe`v{v|v1f2f3f}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,wCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxex