Coverage for cuda/core/_stream.pyx: 82.05%

234 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 01:23 +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  

7from libc.stdint cimport uintptr_t, INT32_MIN 

8from libc.stdlib cimport strtol, getenv 

9  

10from cuda.bindings cimport cydriver 

11  

12from cuda.core._event cimport Event as cyEvent, Event_accept 

13from cuda.core._utils.cuda_utils cimport ( 

14 check_or_create_options, 

15 HANDLE_RETURN, 

16) 

17from cuda.core._utils.version cimport cy_driver_version 

18  

19import cython 

20import warnings 

21from dataclasses import dataclass 

22from typing import Protocol, TYPE_CHECKING 

23  

24from cuda.core._context cimport ( 

25 Context, 

26 Context_check_open, 

27) 

28from cuda.core._device_resources cimport DeviceResources 

29from cuda.core._event import Event, EventOptions 

30  

31from cuda.core._rt cimport context_get_device 

32from cuda.core._rt cimport ( 

33 ContextHandle, 

34 EventHandle, 

35 StreamHandle, 

36 create_context_handle_ref, 

37 create_event_handle_for_stream, 

38 create_stream_handle, 

39 create_stream_handle_with_owner, 

40 context_get_stream_priority_range, 

41 get_last_error, 

42 get_legacy_stream, 

43 get_per_thread_stream, 

44 get_stream_context, 

45 as_intptr, 

46 as_cu, 

47 as_py, 

48) 

49  

50if TYPE_CHECKING: 

51 import cuda.bindings.driver # no-cython-lint 

52 from cuda.core._device import Device 

53 from cuda.core.graph import GraphBuilder 

54  

55__all__ = ['LEGACY_DEFAULT_STREAM', 'PER_THREAD_DEFAULT_STREAM', 'Stream', 'StreamOptions'] 

56  

57  

58@dataclass 

59cdef class StreamOptions: 

60 """Customizable :obj:`~_stream.Stream` options. 

61  

62 Attributes 

63 ---------- 

64 nonblocking : bool, optional 

65 Stream does not synchronize with the NULL stream. (Default to True) 

66 priority : int, optional 

67 Stream priority where lower number represents a 

68 higher priority. (Default to lowest priority) 

69  

70 """ 

71  

72 nonblocking : cython.bint = True 

73 priority: int | None = None 

74  

75  

76class IsStreamType(Protocol): 

77 def __cuda_stream__(self) -> tuple[int, int]: 

78 """ 

79 For any Python object that is meant to be interpreted as a CUDA stream, the intent 

80 can be communicated by implementing this protocol that returns a 2-tuple: The protocol 

81 version number (currently ``0``) and the address of ``cudaStream_t``. Both values 

82 should be Python `int`. 

83 """ 

84 ... 

85  

86  

87cdef class Stream: 

88 """Represent a queue of GPU operations that are executed in a specific order. 

89  

90 Applications use streams to control the order of execution for 

91 GPU work. Work within a single stream are executed sequentially. 

92 Whereas work across multiple streams can be further controlled 

93 using stream priorities and :obj:`~_event.Event` managements. 

94  

95 Advanced users can utilize default streams for enforce complex 

96 implicit synchronization behaviors. 

97  

98 Directly creating a :obj:`~_stream.Stream` is not supported due to ambiguity. 

99 New streams should instead be created through a :obj:`~_device.Device` 

100 object, or created directly through using an existing handle 

101 using Stream.from_handle(). 

102 """ 

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

104 raise RuntimeError( 2um

105 "Stream objects cannot be instantiated directly. " 

106 "Please use Device APIs (create_stream) or other Stream APIs (from_handle)." 

107 ) 

108  

109 @staticmethod 

110 cdef Stream _from_handle(type cls, StreamHandle h_stream): 

111 """Create a Stream from an existing StreamHandle (cdef-only factory).""" 

112 cdef Stream s = cls.__new__(cls) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

113 s._h_stream = h_stream 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

114 s._h_context = get_stream_context(h_stream) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

115 s._device_id = -1 # lazy init'd (invalid sentinel) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

116 s._nonblocking = -1 # lazy init'd 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

117 s._priority = INT32_MIN # lazy init'd 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

118 return s 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

119  

120 @classmethod 

121 def _legacy_default(cls) -> Stream: 

122 """Return the legacy default stream (supports subclassing).""" 

123 return Stream._from_handle(cls, get_legacy_stream()) 2El

124  

125 @classmethod 

126 def _per_thread_default(cls) -> Stream: 

127 """Return the per-thread default stream (supports subclassing).""" 

128 return Stream._from_handle(cls, get_per_thread_stream()) 2Fl

129  

130 @classmethod 

131 def _init(cls, obj: IsStreamType | None = None, options: StreamOptions | None = None, 

132 device_id: int | None = None, Context ctx: Context | None = None) -> Stream: 

133 cdef StreamHandle h_stream 

134 cdef cydriver.CUstream borrowed 

135 cdef ContextHandle h_context 

136  

137 if obj is not None and options is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-gug.g/g:g)c{ | ;g=g?g@g[g]g^g_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf*k+kGk]lHk1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

138 raise ValueError("obj and options cannot be both specified") 2]l

139 if obj is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-gug.g/g:g)c{ | ;g=g?g@g[g]g^g_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf*k+kGkHk1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

140 # Borrowed stream from foreign object 

141 # C++ handle prevents owner from being GC'd until handle is released 

142 # Owner is responsible for keeping the stream's context alive 

143 borrowed = _handle_from_stream_protocol(obj) 2X ug|g}gtbzfqbubvbB V ~grbAf*k+kGkHkwbsb]b

144 h_stream = create_stream_handle_with_owner(borrowed, obj) 2X ug|g}gzfqbubvbB V ~grbAfwbsb

145 return Stream._from_handle(cls, h_stream) 2X ug|g}gzfqbubvbB V ~grbAfwbsb

146  

147 if ctx is None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

148 raise RuntimeError("A CUDA context is required to create a stream") 

149 Context_check_open(ctx) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

150 h_context = ctx._h_context 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

151  

152 cdef StreamOptions opts = check_or_create_options(StreamOptions, options, "Stream options") 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

153 nonblocking = opts.nonblocking 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

154 priority = opts.priority 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

155  

156 cdef unsigned int flags = (cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING if nonblocking 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

157 else cydriver.CUstream_flags.CU_STREAM_DEFAULT) 22j0f

158 # TODO: we might want to consider memoizing high/low per CUDA context and avoid this call 

159 cdef int high, low 

160 cdef cydriver.CUresult res_code 

161 res_code = context_get_stream_priority_range(ctx._h_context, &high, &low) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

162 HANDLE_RETURN(res_code) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

163 cdef int prio 

164 if priority is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

165 prio = priority 2V 1f2f`f

166 if not (low <= prio <= high): 2V 1f2f`f

167 raise ValueError(f"{priority=} is out of range {[low, high]}") 2`f

168 else: 

169 prio = high 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB vgwgrbkgogAflgwb} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

170  

171 # C++ creates the stream and returns owning handle with context dependency. 

172 # For green contexts, the C++ layer auto-dispatches to cuGreenCtxStreamCreate, 

173 # a 12.5 driver API. cuGreenCtxCreate itself is 12.4. The driver alone 

174 # decides availability. The gate lives here, not in C++. 

175 if ctx.is_green and cy_driver_version() < (12, 5, 0): 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

176 raise RuntimeError( 

177 "Green context stream creation requires CUDA driver 12.5 or newer " 

178 f"(current driver: {'.'.join(map(str, cy_driver_version()))})" 

179 ) 

180 h_stream = create_stream_handle(h_context, flags, prio) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

181 if not h_stream: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

182 res_code = get_last_error() 22j

183 if not nonblocking and res_code == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE: 22j

184 # cuGreenCtxStreamCreate rejects CU_STREAM_DEFAULT; 

185 # no need to check is_green since primary streams don't fail this way 

186 raise ValueError( 22j

187 "Green context streams must be non-blocking. " 

188 "Use StreamOptions(nonblocking=True) or omit the option (True is the default)." 

189 ) 

190 else: 

191 HANDLE_RETURN(res_code) 

192 cdef Stream self = Stream._from_handle(cls, h_stream) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

193 self._nonblocking = int(nonblocking) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

194 self._priority = prio 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

195 if device_id is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

196 self._device_id = device_id 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

197 return self 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb

198  

199 cpdef close(self): 

200 """Destroy the stream. 

201  

202 Releases the stream handle. For owned streams, this destroys the 

203 underlying CUDA stream. For borrowed streams, this releases the 

204 reference and allows the Python owner to be GC'd. 

205  

206 .. warning:: 

207 Do not close :obj:`LEGACY_DEFAULT_STREAM` or 

208 :obj:`PER_THREAD_DEFAULT_STREAM`. They are shared module-level 

209 objects, so closing one invalidates it for the rest of the process. 

210 """ 

211 self._h_stream.reset() 2BfCfDfVbWb)fA Xb9 /j:j;jvmwm=j?jxm@j[j]j^j_j`jymzmAm{j|j}j~jakbkckdkekfkgkhkBmCmDmEmFmGmHmImJmKmLmMmNm6 Om7 PmQm! RmSmTmUmVmMbtg%b'bNbObPbQbRbyf^cBeS CeDeT U Ee0f)l|g}gtbzfV AfSb3fTb4fxeyeze

212  

213 @property 

214 def is_closed(self) -> bool: 

215 """Whether this stream has been closed.""" 

216 return self._h_stream.get() == NULL 2)l|g}gtbzf

217  

218 def __cuda_stream__(self) -> tuple[int, int]: 

219 """Return an instance of a __cuda_stream__ protocol.""" 

220 Stream_check_open(self) 2}fX tbzfB

221 return (0, as_intptr(self._h_stream)) 2}fX zfB

222  

223 def __hash__(self) -> int: 

224 return hash(as_intptr(self._h_stream)) 2ugWmXmYmZm?l@l0mGlqbB wgrbkgsb

225  

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

227 if not isinstance(other, Stream): 2=lug^l_l?l@lGlqbngubvbB rbkgogwbsbpg

228 return NotImplemented 2=l^lpg

229 return as_intptr(self._h_stream) == as_intptr((<Stream>other)._h_stream) 2=lug_l?l@lGlqbngubvbB rbkgogwbsb

230  

231 def __repr__(self) -> str: 

232 cdef ContextHandle h_context 

233 if not self._h_stream: 28 ybdczbAbBb3 CbDb4 EbFb)lCl

234 return "<Stream handle=0x0 context=0x0>" 2)l

235 Stream_get_ctx(self, &h_context) 28 ybdczbAbBb3 CbDb4 EbFbCl

236 return f"<Stream handle={as_intptr(self._h_stream):#x} context={as_intptr(h_context):#x}>" 28 ybdczbAbBb3 CbDb4 EbFbCl

237  

238 @property 

239 def handle(self) -> cuda.bindings.driver.CUstream: 

240 """Return the underlying ``CUstream`` object. 

241  

242 .. caution:: 

243  

244 This handle is a Python object. To get the memory address of the underlying C 

245 handle, call ``int(Stream.handle)``. 

246 """ 

247 return as_py(self._h_stream) 2}fqgxbF ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L rgdc{f^b|f_bM w sgMbNbPfQfRfSfTfyfqiUfVf3j4jWfXf}c)l=lugzfqbubvbV vgrbAfwbsbSbxeyezeUb

248  

249 @property 

250 def is_nonblocking(self) -> bool: 

251 """Return True if this is a nonblocking stream, otherwise False.""" 

252 Stream_check_open(self) 2V 1f2flg

253 cdef unsigned int flags 

254 if self._nonblocking == -1: 2V 1f2flg

255 with nogil: 1V

256 HANDLE_RETURN(cydriver.cuStreamGetFlags(as_cu(self._h_stream), &flags)) 1V

257 self._nonblocking = flags & cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING 1V

258 return bool(self._nonblocking) 2V 1f2flg

259  

260 @property 

261 def priority(self) -> int: 

262 """Return the stream priority.""" 

263 Stream_check_open(self) 2V 1f2f`f

264 cdef int prio 

265 if self._priority == INT32_MIN: 2V 1f2f`f

266 with nogil: 1V

267 HANDLE_RETURN(cydriver.cuStreamGetPriority(as_cu(self._h_stream), &prio)) 1V

268 self._priority = prio 1V

269 return self._priority 2V 1f2f`f

270  

271 def sync(self) -> None: 

272 """Synchronize the stream.""" 

273 Stream_check_open(self) 28 BfCfDfVb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybdczb)e*eJk{f+eriecZbfc^b,e|f-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/ecbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcef`b/j}h:j{b;jIbJbah=jbh?jch@j[j]j|b^jKbDl_j}b`j~haibiLb~b{jac|jbc}jcc~jakbkckdkekfkgkhkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflfmfnfQkofpfqfRkrfsfSkTktfufUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSlnkokTlpkqkUlrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh5i6iphqh7i8irhsh9i!ithuh1 Q 2 R (b)b*bZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRbvhwhqiKjvf^cBeS T U LjEe+b'c(ctkukvkwkxkykzkAkBkCkDkEkFktbmgW xhyhzhAhBhSbTbxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

274 with nogil: 28 BfCfDfVb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybdczb)e*eJk{f+eriecZbfc^b,e|f-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/ecbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcef`b/j}h:j{b;jIbJbah=jbh?jch@j[j]j|b^jKbDl_j}b`j~haibiLb~b{jac|jbc}jcc~jakbkckdkekfkgkhkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflfmfnfQkofpfqfRkrfsfSkTktfufUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSlnkokTlpkqkUlrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh5i6iphqh7i8irhsh9i!ithuh1 Q 2 R (b)b*bZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRbvhwhqiKjvf^cBeS T U LjEe+b'c(ctkukvkwkxkykzkAkBkCkDkEkFkmgW xhyhzhAhBhSbTbxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

275 HANDLE_RETURN(cydriver.cuStreamSynchronize(as_cu(self._h_stream))) 28 BfCfDfVb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybdczb)e*eJk{f+eriecZbfc^b,e|f-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/ecbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcef`b/j}h:j{b;jIbJbah=jbh?jch@j[j]j|b^jKbDl_j}b`j~haibiLb~b{jac|jbc}jcc~jakbkckdkekfkgkhkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflfmfnfQkofpfqfRkrfsfSkTktfufUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSlnkokTlpkqkUlrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh5i6iphqh7i8irhsh9i!ithuh1 Q 2 R (b)b*bZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRbvhwhqiKjvf^cBeS T U LjEe+b'c(ctkukvkwkxkykzkAkBkCkDkEkFkmgW xhyhzhAhBhSbTbxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

276  

277 def record(self, event: Event | None = None, options: EventOptions | None = None) -> Event: 

278 """Record an event onto the stream. 

279  

280 Creates an :obj:`~_event.Event` object (or reuses the given one) by 

281 recording on the stream. 

282  

283 Parameters 

284 ---------- 

285 event : :obj:`~_event.Event`, optional 

286 Optional event object to be reused for recording. 

287 options : :obj:`EventOptions`, optional 

288 Customizable dataclass for event creation options. 

289  

290 Returns 

291 ------- 

292 :obj:`~_event.Event` 

293 Newly created event object. 

294  

295 Note 

296 ---- 

297 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or 

298 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it 

299 refers to whichever context is current, so a newly created event is 

300 associated with the current context at call time. 

301  

302 """ 

303 # Create an Event object (or reusing the given one) by recording 

304 # on the stream. Event flags such as disabling timing, nonblocking, 

305 # and CU_EVENT_RECORD_EXTERNAL, can be set in EventOptions. 

306 Stream_check_open(self) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | tb} W

307 cdef ContextHandle h_context 

308 cdef int device_id 

309 cdef cyEvent event_obj 

310 if event is None: 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | } W

311 Stream_get_ctx_device(self, &h_context, &device_id) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | } W

312 event_obj = cyEvent._init(cyEvent, device_id, h_context, options, False) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | } W

313 else: 

314 event_obj = Event_accept(event) 25 *f

315 if event is not None and event_obj.is_ipc_enabled: 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W

316 raise TypeError( 15

317 "IPC-enabled events should not be re-recorded, instead create a " 

318 "new event by supplying options." 

319 ) 

320  

321 cdef cydriver.CUevent e = as_cu(event_obj._h_event) 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W

322 with nogil: 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W

323 HANDLE_RETURN(cydriver.cuEventRecord(e, as_cu(self._h_stream))) 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W

324 return event_obj 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W

325  

326 def wait(self, event_or_stream: Event | Stream) -> None: 

327 """Wait for a CUDA event or a CUDA stream. 

328  

329 Waiting for an event or a stream establishes a stream order. 

330  

331 If a :obj:`~_stream.Stream` is provided, then wait until the stream's 

332 work is completed. This is done by recording a new :obj:`~_event.Event` 

333 on the stream and then waiting on it. 

334  

335 Parameters 

336 ---------- 

337 event_or_stream : :obj:`~_event.Event` | :obj:`~_stream.Stream` 

338 The event or stream to wait for. Objects supporting the 

339 ``__cuda_stream__`` protocol are also accepted and treated as 

340 streams. 

341  

342 """ 

343 Stream_check_open(self) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w *fW ]b

344 cdef Stream stream 

345 cdef cyEvent event 

346 cdef EventHandle h_event 

347  

348 # Handle Event directly 

349 if isinstance(event_or_stream, Event): 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w *fW ]b

350 event = Event_accept(event_or_stream) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w *fW

351 with nogil: 1CxyvzADabcdefghijklmnopqrstuwW

352 # TODO: support flags other than 0? 

353 HANDLE_RETURN(cydriver.cuStreamWaitEvent( 1CxyvzADabcdefghijklmnopqrstuwW

354 as_cu(self._h_stream), as_cu(event._h_event), 0)) 

355 return 1CxyvzADabcdefghijklmnopqrstuwW

356  

357 # Convert to Stream if needed 

358 if isinstance(event_or_stream, Stream): 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w ]b

359 stream = <Stream>event_or_stream 1CxyvzADabcdefghijklmnopqrstuw

360 Stream_check_open(stream) 1CxyvzADabcdefghijklmnopqrstuw

361 else: 

362 try: 2]b

363 stream = Stream._init(obj=event_or_stream) 2]b

364 except Exception as e: 2]b

365 raise ValueError( 2]b

366 "only an Event, Stream, or object supporting __cuda_stream__ can be waited," 2]b

367 f" got {type(event_or_stream)}" 2]b

368 ) from e 2]b

369  

370 # Wait on stream via a temporary event created in that stream's own 

371 # context; an event from the current context would be rejected by 

372 # cuEventRecord when the streams live on different devices. 

373 with nogil: 1CxyvzDabcdefghijklmnopqrstuw

374 h_event = create_event_handle_for_stream( 1CxyvzDabcdefghijklmnopqrstuw

375 as_cu(stream._h_stream), cydriver.CUevent_flags.CU_EVENT_DISABLE_TIMING) 

376 if not h_event: 1CxyvzDabcdefghijklmnopqrstuw

377 HANDLE_RETURN(get_last_error()) 

378 HANDLE_RETURN(cydriver.cuEventRecord(as_cu(h_event), as_cu(stream._h_stream))) 1CxyvzDabcdefghijklmnopqrstuw

379 # TODO: support flags other than 0? 

380 HANDLE_RETURN(cydriver.cuStreamWaitEvent(as_cu(self._h_stream), as_cu(h_event), 0)) 1CxyvzDabcdefghijklmnopqrstuw

381  

382 @property 

383 def device(self) -> Device: 

384 """Return the :obj:`~_device.Device` singleton associated with this stream. 

385  

386 Note 

387 ---- 

388 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or 

389 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it 

390 refers to whichever context is current, so this returns the device for 

391 the current context at call time. 

392  

393 For a created stream, the current context on the device may differ from 

394 this stream's context. That case occurs when a different CUDA context is 

395 set current after the stream is created. 

396  

397 """ 

398 Stream_check_open(self) 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB

399 from cuda.core._device import Device # avoid circular import 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB

400 cdef ContextHandle h_context 

401 cdef int device_id 

402 Stream_get_ctx_device(self, &h_context, &device_id) 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB

403 return Device(device_id) 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB

404  

405 @property 

406 def context(self) -> Context: 

407 """Return the :obj:`~_context.Context` associated with this stream. 

408  

409 Note 

410 ---- 

411 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or 

412 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it 

413 refers to whichever context is current, so this returns the current 

414 context at call time. 

415  

416 """ 

417 Stream_check_open(self) 2F ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w -b.b/b:b;b=bMb@bNbZ [bB

418 cdef ContextHandle h_context 

419 cdef int device_id 

420 Stream_get_ctx_device(self, &h_context, &device_id) 2F ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w -b.b/b:b;b=bMb@bNbZ [bB

421 return Context._from_handle(Context, h_context, device_id) 2F ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w -b.b/b:b;b=bMb@bNbZ [bB

422  

423 @property 

424 def resources(self) -> DeviceResources: 

425 """Query the hardware resources provisioned for this stream's context. 

426  

427 For streams created from a green context, returns the resources 

428 that context was provisioned with. For streams on the primary 

429 context, returns the full device resources. 

430  

431 Note 

432 ---- 

433 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or 

434 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it 

435 refers to whichever context is current, so this queries the current 

436 context at call time. 

437  

438 """ 

439 Stream_check_open(self) 2%b'b?b

440 cdef ContextHandle h_context 

441 cdef int device_id 

442 Stream_get_ctx_device(self, &h_context, &device_id) 2%b'b?b

443 return DeviceResources._init_from_ctx(h_context, device_id) 2%b'b?b

444  

445 @staticmethod 

446 def from_handle(handle) -> Stream: 

447 """Create a new :obj:`~_stream.Stream` object from a foreign stream handle. 

448  

449 Uses a cudaStream_t pointer address represented as a Python int 

450 to create a new :obj:`~_stream.Stream` object. 

451  

452 Note 

453 ---- 

454 Stream lifetime is not managed, foreign object must remain 

455 alive while this stream is active. 

456  

457 Parameters 

458 ---------- 

459 handle : int 

460 Stream handle representing the address of a foreign 

461 stream object. 

462  

463 Returns 

464 ------- 

465 :obj:`~_stream.Stream` 

466 Newly created stream object. 

467  

468 """ 

469  

470 class _stream_holder: 2ug|g}gzfqbubvbV ~grbwbsb

471 def __cuda_stream__(self) -> tuple[int, int]: 2ug|g}gzfqbubvbV ~grbwbsb

472 return (0, handle) 2ug|g}gzfqbubvbV ~grbwbsb

473  

474 return Stream._init(obj=_stream_holder()) 2ug|g}gzfqbubvbV ~grbwbsb

475  

476 def create_graph_builder(self) -> GraphBuilder: 

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

478  

479 The new graph builder will be associated with this stream. 

480  

481 Returns 

482 ------- 

483 :obj:`~graph.GraphBuilder` 

484 Newly created graph builder object. 

485  

486 """ 

487 Stream_check_open(self) 28 ~fagBfCfDfVbbg_c`c{c|cabWbbbXb9 cgdgeg+c,c-cfggghgigjg.c/c:ccbdbebfbgbhbibjbkb6 7 ! 0ftb

488 from cuda.core.graph._graph_builder import GraphBuilder 28 ~fagBfCfDfVbbg_c`c{c|cabWbbbXb9 cgdgeg+c,c-cfggghgigjg.c/c:ccbdbebfbgbhbibjbkb6 7 ! 0f

489  

490 return GraphBuilder._init(self) 28 ~fagBfCfDfVbbg_c`c{c|cabWbbbXb9 cgdgeg+c,c-cfggghgigjg.c/c:ccbdbebfbgbhbibjbkb6 7 ! 0f

491  

492  

493LEGACY_DEFAULT_STREAM: Stream = Stream._legacy_default() 

494PER_THREAD_DEFAULT_STREAM: Stream = Stream._per_thread_default() 

495  

496  

497cpdef Stream default_stream(): 

498 """Return the default CUDA :obj:`~_stream.Stream`. 

499  

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

501 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

502  

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

504 the legacy stream. 

505  

506 """ 

507 # TODO: flip the default 

508 cdef const char* use_ptds_raw = getenv("CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM") 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

509  

510 cdef int use_ptds = 0 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

511 if use_ptds_raw != NULL: 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

512 use_ptds = <int>strtol(use_ptds_raw, NULL, 10) 2!l

513  

514 # value is non-zero, including for weird stuff like 123foo 

515 if use_ptds: 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

516 return PER_THREAD_DEFAULT_STREAM 2!l

517 else: 

518 return LEGACY_DEFAULT_STREAM 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

519  

520cdef inline bint Stream_handle_is_default_token(cydriver.CUstream s) noexcept nogil: 

521 """Return True for the raw CU_STREAM_LEGACY and CU_STREAM_PER_THREAD tokens. 

522  

523 These tokens carry no context of their own; they refer to whatever context 

524 is current, so nothing resolved from one may be cached on the object. 

525 """ 

526 cdef uintptr_t h = <uintptr_t>s 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbZb0bAbBb3 CblbDb4 1b2bmbnbobpbEbFbM w 5fffVcWcIbJbahXcbhgfchhfifYcjfKbZc0cLb1c2c3c4c5c6c7c8c9c!c#c$cdhehfh`lFeikGejkkkO E P # $ % ' ( ) * + 5 3b4bHelkIemkJeKeLeMeNeOenkokpkqkrksk5bgh6bhh7bih8bjh9bkhlh!bmh#bnh$boh{l8k9k!k|l}l~l#kam$kbm%k'kcm(kdm0j)kphqhrhsh-b.b/b:b;b=bthuhMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b(b)b*b@bNbZ 0 ObPbQbRbvhwh6f7f8f9f!f#f$f%fN 'f(f^cemfmgmhmS imjmkmlmCeDewfT U xfmmnmompmqm1jrm0fsmtm+b` MjNjOjPjQj)c{ | RjClSjTjUjVjWjXjYj[b,bB } W xhyhzhAhBhSbTbChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

527 return h == <uintptr_t>cydriver.CU_STREAM_LEGACY or h == <uintptr_t>cydriver.CU_STREAM_PER_THREAD 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbZb0bAbBb3 CblbDb4 1b2bmbnbobpbEbFbM w 5fffVcWcIbJbahXcbhgfchhfifYcjfKbZc0cLb1c2c3c4c5c6c7c8c9c!c#c$cdhehfh`lFeikGejkkkO E P # $ % ' ( ) * + 5 3b4bHelkIemkJeKeLeMeNeOenkokpkqkrksk5bgh6bhh7bih8bjh9bkhlh!bmh#bnh$boh{l8k9k!k|l}l~l#kam$kbm%k'kcm(kdm0j)kphqhrhsh-b.b/b:b;b=bthuhMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b(b)b*b@bNbZ 0 ObPbQbRbvhwh6f7f8f9f!f#f$f%fN 'f(f^cemfmgmhmS imjmkmlmCeDewfT U xfmmnmompmqm1jrm0fsmtm+b` MjNjOjPjQj)c{ | RjClSjTjUjVjWjXjYj[b,bB } W xhyhzhAhBhSbTbChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

528  

529  

530cdef inline bint Stream_is_default_token(Stream self) noexcept nogil: 

531 """Return True when this stream is CU_STREAM_LEGACY or CU_STREAM_PER_THREAD.""" 

532 return Stream_handle_is_default_token(as_cu(self._h_stream)) 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbZb0bAbBb3 CblbDb4 1b2bmbnbobpbEbFbM w 5fffVcWcIbJbahXcbhgfchhfifYcjfKbZc0cLb1c2c3c4c5c6c7c8c9c!c#c$cdhehfhFeikGejkkkO E P # $ % ' ( ) * + 5 3b4bHelkIemkJeKeLeMeNeOenkokpkqkrksk5bgh6bhh7bih8bjh9bkhlh!bmh#bnh$boh8k9k!k#k$k%k'k(k)kphqhrhsh-b.b/b:b;b=bthuhMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b(b)b*b@bNbZ 0 ObPbQbRbvhwh6f7f8f9f!f#f$f%fN 'f(f^cS CeDeT U +b` MjNjOjPjQj)c{ | RjClSjTjUjVjWjXjYj[b,bB } W xhyhzhAhBhSbTbChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

533  

534  

535cdef inline bint Stream_is_legacy_default_token(Stream self) noexcept nogil: 

536 """Return True only for CU_STREAM_LEGACY. 

537  

538 Unlike CU_STREAM_PER_THREAD, the legacy default stream token is rejected 

539 outright (CUDA_ERROR_INVALID_VALUE) by cuMemcpyWithAttributesAsync and 

540 cuMemcpyBatchAsync; CU_STREAM_PER_THREAD is a real stream to those entry 

541 points and is accepted normally. Use this narrower check, not 

542 Stream_is_default_token, wherever that distinction matters. 

543 """ 

544 return <uintptr_t>as_cu(self._h_stream) == <uintptr_t>cydriver.CU_STREAM_LEGACY 2`b}h{bIbJbahbhchOf#l|bKbDl}b~haibiLb~bacbccc$l%l'ldhehfhcidieifigihiii6 ji7 kiliminioipi

545  

546  

547cdef inline int Stream_get_ctx(Stream self, ContextHandle* h_context) except?-1 nogil: 

548 """Resolve the stream's context handle into ``h_context``.""" 

549 cdef cydriver.CUcontext ctx 

550 cdef bint is_default = Stream_is_default_token(self) 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | Cl[b,bB } W

551  

552 # Default-stream tokens must never reuse a sticky object field, even if 

553 # something else populated ``_h_context`` (defense in depth for #2485). 

554 if self._h_context and not is_default: 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | Cl[b,bB } W

555 h_context[0] = self._h_context 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w O E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 N S T U ` { | Cl[b,bB } W

556 return 0 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w O E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 N S T U ` { | Cl[b,bB } W

557  

558 h_context[0] = get_stream_context(self._h_stream) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

559 if not h_context[0]: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

560 HANDLE_RETURN(cydriver.cuStreamGetCtx(as_cu(self._h_stream), &ctx)) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

561 if ctx != NULL: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

562 with gil: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

563 h_context[0] = create_context_handle_ref(ctx) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

564  

565 if h_context[0] and not is_default: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

566 self._h_context = h_context[0] 

567 return 0 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f

568  

569  

570cdef inline int Stream_get_ctx_device(Stream self, ContextHandle* h_context, int* device_id) except?-1: 

571 """Resolve the stream's context handle and device ID.""" 

572 cdef cydriver.CUdevice target_dev 

573 cdef bint is_default = Stream_is_default_token(self) 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W

574  

575 with nogil: 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W

576 Stream_get_ctx(self, h_context) 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W

577 if self._device_id >= 0 and not is_default: 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W

578 device_id[0] = self._device_id 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w O E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 N S T U ` { | [b,bB } W

579 else: 

580 # Query the device with the stream's context current. The handle 

581 # layer restores the caller's context, including on failure. 

582 HANDLE_RETURN(context_get_device(h_context[0], &target_dev)) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(fB

583 device_id[0] = <int>target_dev 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(fB

584 if not is_default: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(fB

585 self._device_id = device_id[0] 1B

586 return 0 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W

587  

588  

589cdef cydriver.CUstream _handle_from_stream_protocol(obj) except*: 

590 if isinstance(obj, Stream): 2X ug|g}gtbzfqbubvbB V ~grbAf*k+kGkHkwbsb]b

591 Stream_check_open(<Stream>obj) 2Af

592 return as_cu((<Stream>obj)._h_stream) 2Af

593  

594 try: 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkHkwbsb]b

595 cuda_stream_attr = obj.__cuda_stream__ 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkHkwbsb]b

596 except AttributeError: 2]b

597 raise TypeError(f"{type(obj)} object does not have a '__cuda_stream__' attribute") from None 2]b

598  

599 if callable(cuda_stream_attr): 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkHkwbsb

600 info = cuda_stream_attr() 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkwbsb

601 else: 

602 info = cuda_stream_attr 2Hk

603 warnings.warn( 2Hk

604 "Implementing __cuda_stream__ as an attribute is deprecated; it must be implemented as a method", 

605 stacklevel=3, 

606 category=DeprecationWarning, 2Hk

607 ) 

608  

609 try: 2X ug|g}gzfqbubvbB V ~grb*k+kGkHkwbsb

610 len_info = len(info) 2X ug|g}gzfqbubvbB V ~grb*k+kGkHkwbsb

611 except TypeError as e: 2*k

612 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {type(info)}") from e 2*k

613 if len_info != 2: 2X ug|g}gzfqbubvbB V ~grb+kGkHkwbsb

614 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {len_info} elements") 2+kHk

615 if info[0] != 0: 2X ug|g}gzfqbubvbB V ~grbGkwbsb

616 raise RuntimeError( 2Gk

617 f"The first element of the sequence returned by obj.__cuda_stream__ must be 0, got {repr(info[0])}" 2Gk

618 ) 

619 return <cydriver.CUstream><uintptr_t>(info[1]) 2X ug|g}gzfqbubvbB V ~grbwbsb

620  

621# Helper for API functions that accept either Stream or GraphBuilder. Performs 

622# needed checks and returns the relevant stream. Rejects None so that callers 

623# cannot rely on an implicit fallback to the default stream; if the default 

624# stream is wanted, pass `device.default_stream` explicitly. 

625cpdef Stream Stream_accept(arg, bint allow_stream_protocol=False): 

626 from cuda.core.graph._graph_builder import GraphBuilder 28 Vb_c`c{c|cxbEfx F G Ffy GfabHfv Wb)fz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew -k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDewfT U xfLj1jEeZf+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzf_f[lxhyhzhAhBhSb3f(lTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

627  

628 cdef Stream stream 

629 if arg is None: 28 Vb_c`c{c|cxbEfx F G Ffy GfabHfv Wb)fz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew -k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDewfT U xfLj1jEeZf+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzf_f[lxhyhzhAhBhSb3f(lTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

630 raise TypeError( 2Yf[l

631 "stream is required and must not be None; " 

632 "pass device.default_stream explicitly to use the default stream." 

633 ) 

634 if isinstance(arg, Stream): 28 Vb_c`c{c|cxbEfx F G Ffy GfabHfv Wb)fz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew -k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDewfT U xfLj1jEeZf+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzf_fxhyhzhAhBhSb3f(lTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

635 stream = <Stream>arg 28 Vb_c`c{c|cxbF G abv Wb)fbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefAe-k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDeT U Lj1jEe+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzfxhyhzhAhBhSb3fTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

636 Stream_check_open(stream) 28 Vb_c`c{c|cxbF G abv Wb)fbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefAe-k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDeT U Lj1jEe+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzfxhyhzhAhBhSb3fTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

637 return stream 28 Vb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefAe-k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDeT U Lj1jEe+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFkzfxhyhzhAhBhSb3fTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h

638 elif isinstance(arg, GraphBuilder): 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! X wfxfZftb_fSb(l

639 stream = <Stream>arg.stream 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! wfxfZf_fSb

640 Stream_check_open(stream) 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! wfxfZfSb

641 return stream 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! wfxfZfSb

642 elif allow_stream_protocol and hasattr(arg, "__cuda_stream__"): 2X tb(l

643 stream = Stream._init(arg) 2X tb

644 warnings.warn( 1X

645 "Passing foreign stream objects to this function via the " 

646 "stream protocol is deprecated. Convert the object explicitly " 

647 "using Stream(obj) instead.", 

648 stacklevel=2, 

649 category=DeprecationWarning, 1X

650 ) 

651 return stream 1X

652 raise TypeError(f"Stream or GraphBuilder expected, got {type(arg).__name__}") 2(l