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

236 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-03 02:41 +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) 

17  

18import cython 

19import warnings 

20from dataclasses import dataclass 

21from typing import Protocol, TYPE_CHECKING 

22  

23from cuda.core._context cimport Context 

24from cuda.core._device_resources cimport DeviceResources 

25from cuda.core._event import Event, EventOptions 

26  

27from cuda.core._resource_handles cimport ( 

28 ContextHandle, 

29 EventHandle, 

30 StreamHandle, 

31 create_context_handle_ref, 

32 create_event_handle_noctx, 

33 create_stream_handle, 

34 create_stream_handle_with_owner, 

35 get_current_context, 

36 get_last_error, 

37 get_legacy_stream, 

38 get_per_thread_stream, 

39 get_stream_context, 

40 as_intptr, 

41 as_cu, 

42 as_py, 

43) 

44  

45if TYPE_CHECKING: 

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

47 from cuda.core._device import Device 

48 from cuda.core.graph import GraphBuilder 

49  

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

51  

52  

53@dataclass 

54cdef class StreamOptions: 

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

56  

57 Attributes 

58 ---------- 

59 nonblocking : bool, optional 

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

61 priority : int, optional 

62 Stream priority where lower number represents a 

63 higher priority. (Default to lowest priority) 

64  

65 """ 

66  

67 nonblocking : cython.bint = True 

68 priority: int | None = None 

69  

70  

71class IsStreamType(Protocol): 

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

73 """ 

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

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

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

77 should be Python `int`. 

78 """ 

79 ... 

80  

81  

82cdef class Stream: 

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

84  

85 Applications use streams to control the order of execution for 

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

87 Whereas work across multiple streams can be further controlled 

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

89  

90 Advanced users can utilize default streams for enforce complex 

91 implicit synchronization behaviors. 

92  

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

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

95 object, or created directly through using an existing handle 

96 using Stream.from_handle(). 

97 """ 

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

99 raise RuntimeError( 2Dm

100 "Stream objects cannot be instantiated directly. " 

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

102 ) 

103  

104 @staticmethod 

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

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

107 cdef Stream s = cls.__new__(cls) 2Kc# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew Pb4cnjbh5cojQb6cpjRb{fSb|fch7cqjdh8crjeh}fsf9csj~f!ctj#cujTb$cvjUb%cwjVb'cxjfhagghbghhcgWbXb(cyjYb)czjZb*cAj0b+cBj,cCj-cDj.cEj/cFj:cGj;cHj=cIj?cJjihdgjhegVhfgWhggXhhgkhiglhjgmhkgnhlgohmgphqhngrhog6 shpg7 YhqgZhrg! thsguhvhtgwhugxhvgyhwg{e|e5l6l7l8l9l[i}e!l~eafbf#lcfxg$lyg]i%l'ldfef@c[c]c^c_c`cL KjC LjU V W X Y Z 0 1 Mj8 IbJb(l)l*l+l,l-l.l/l:l;l0h1h2h3h4h5h1b2b3b4b5b6b6h7h8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgflezhyfzf=i?iAfBfAgBguiejmefjgjUf3chjijneB ffCf9b!bjjkjljmjAcBcCc~ NjCgOjDgPj0fEgQjFgRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$jGg%jHgoe'jIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g(j3g)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jak4gbk5gpeck6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbbdk@gek[gfk]ggk^ghk_gik`gjk{gkk|g=l9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfDfEf2fQlkbRlWfebfbah3f6fQ Mblb$bFfqere}gseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

108 s._h_stream = h_stream 2Kc# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew Pb4cnjbh5cojQb6cpjRb{fSb|fch7cqjdh8crjeh}fsf9csj~f!ctj#cujTb$cvjUb%cwjVb'cxjfhagghbghhcgWbXb(cyjYb)czjZb*cAj0b+cBj,cCj-cDj.cEj/cFj:cGj;cHj=cIj?cJjihdgjhegVhfgWhggXhhgkhiglhjgmhkgnhlgohmgphqhngrhog6 shpg7 YhqgZhrg! thsguhvhtgwhugxhvgyhwg{e|e5l6l7l8l9l[i}e!l~eafbf#lcfxg$lyg]i%l'ldfef@c[c]c^c_c`cL KjC LjU V W X Y Z 0 1 Mj8 IbJb(l)l*l+l,l-l.l/l:l;l0h1h2h3h4h5h1b2b3b4b5b6b6h7h8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgflezhyfzf=i?iAfBfAgBguiejmefjgjUf3chjijneB ffCf9b!bjjkjljmjAcBcCc~ NjCgOjDgPj0fEgQjFgRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$jGg%jHgoe'jIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g(j3g)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jak4gbk5gpeck6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbbdk@gek[gfk]ggk^ghk_gik`gjk{gkk|g=l9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfDfEf2fQlkbRlWfebfbah3f6fQ Mblb$bFfqere}gseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

109 s._h_context = get_stream_context(h_stream) 2Kc# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew Pb4cnjbh5cojQb6cpjRb{fSb|fch7cqjdh8crjeh}fsf9csj~f!ctj#cujTb$cvjUb%cwjVb'cxjfhagghbghhcgWbXb(cyjYb)czjZb*cAj0b+cBj,cCj-cDj.cEj/cFj:cGj;cHj=cIj?cJjihdgjhegVhfgWhggXhhgkhiglhjgmhkgnhlgohmgphqhngrhog6 shpg7 YhqgZhrg! thsguhvhtgwhugxhvgyhwg{e|e5l6l7l8l9l[i}e!l~eafbf#lcfxg$lyg]i%l'ldfef@c[c]c^c_c`cL KjC LjU V W X Y Z 0 1 Mj8 IbJb(l)l*l+l,l-l.l/l:l;l0h1h2h3h4h5h1b2b3b4b5b6b6h7h8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgflezhyfzf=i?iAfBfAgBguiejmefjgjUf3chjijneB ffCf9b!bjjkjljmjAcBcCc~ NjCgOjDgPj0fEgQjFgRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$jGg%jHgoe'jIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g(j3g)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jak4gbk5gpeck6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbbdk@gek[gfk]ggk^ghk_gik`gjk{gkk|g=l9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfDfEf2fQlkbRlWfebfbah3f6fQ Mblb$bFfqere}gseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

110 s._device_id = -1 # lazy init'd (invalid sentinel) 2Kc# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew Pb4cnjbh5cojQb6cpjRb{fSb|fch7cqjdh8crjeh}fsf9csj~f!ctj#cujTb$cvjUb%cwjVb'cxjfhagghbghhcgWbXb(cyjYb)czjZb*cAj0b+cBj,cCj-cDj.cEj/cFj:cGj;cHj=cIj?cJjihdgjhegVhfgWhggXhhgkhiglhjgmhkgnhlgohmgphqhngrhog6 shpg7 YhqgZhrg! thsguhvhtgwhugxhvgyhwg{e|e5l6l7l8l9l[i}e!l~eafbf#lcfxg$lyg]i%l'ldfef@c[c]c^c_c`cL KjC LjU V W X Y Z 0 1 Mj8 IbJb(l)l*l+l,l-l.l/l:l;l0h1h2h3h4h5h1b2b3b4b5b6b6h7h8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgflezhyfzf=i?iAfBfAgBguiejmefjgjUf3chjijneB ffCf9b!bjjkjljmjAcBcCc~ NjCgOjDgPj0fEgQjFgRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$jGg%jHgoe'jIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g(j3g)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jak4gbk5gpeck6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbbdk@gek[gfk]ggk^ghk_gik`gjk{gkk|g=l9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfDfEf2fQlkbRlWfebfbah3f6fQ Mblb$bFfqere}gseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

111 s._nonblocking = -1 # lazy init'd 2Kc# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew Pb4cnjbh5cojQb6cpjRb{fSb|fch7cqjdh8crjeh}fsf9csj~f!ctj#cujTb$cvjUb%cwjVb'cxjfhagghbghhcgWbXb(cyjYb)czjZb*cAj0b+cBj,cCj-cDj.cEj/cFj:cGj;cHj=cIj?cJjihdgjhegVhfgWhggXhhgkhiglhjgmhkgnhlgohmgphqhngrhog6 shpg7 YhqgZhrg! thsguhvhtgwhugxhvgyhwg{e|e5l6l7l8l9l[i}e!l~eafbf#lcfxg$lyg]i%l'ldfef@c[c]c^c_c`cL KjC LjU V W X Y Z 0 1 Mj8 IbJb(l)l*l+l,l-l.l/l:l;l0h1h2h3h4h5h1b2b3b4b5b6b6h7h8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgflezhyfzf=i?iAfBfAgBguiejmefjgjUf3chjijneB ffCf9b!bjjkjljmjAcBcCc~ NjCgOjDgPj0fEgQjFgRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$jGg%jHgoe'jIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g(j3g)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jak4gbk5gpeck6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbbdk@gek[gfk]ggk^ghk_gik`gjk{gkk|g=l9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfDfEf2fQlkbRlWfebfbah3f6fQ Mblb$bFfqere}gseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

112 s._priority = INT32_MIN # lazy init'd 2Kc# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew Pb4cnjbh5cojQb6cpjRb{fSb|fch7cqjdh8crjeh}fsf9csj~f!ctj#cujTb$cvjUb%cwjVb'cxjfhagghbghhcgWbXb(cyjYb)czjZb*cAj0b+cBj,cCj-cDj.cEj/cFj:cGj;cHj=cIj?cJjihdgjhegVhfgWhggXhhgkhiglhjgmhkgnhlgohmgphqhngrhog6 shpg7 YhqgZhrg! thsguhvhtgwhugxhvgyhwg{e|e5l6l7l8l9l[i}e!l~eafbf#lcfxg$lyg]i%l'ldfef@c[c]c^c_c`cL KjC LjU V W X Y Z 0 1 Mj8 IbJb(l)l*l+l,l-l.l/l:l;l0h1h2h3h4h5h1b2b3b4b5b6b6h7h8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgflezhyfzf=i?iAfBfAgBguiejmefjgjUf3chjijneB ffCf9b!bjjkjljmjAcBcCc~ NjCgOjDgPj0fEgQjFgRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$jGg%jHgoe'jIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g(j3g)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jak4gbk5gpeck6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbbdk@gek[gfk]ggk^ghk_gik`gjk{gkk|g=l9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfDfEf2fQlkbRlWfebfbah3f6fQ Mblb$bFfqere}gseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

113 return s 2Kc# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew Pb4cnjbh5cojQb6cpjRb{fSb|fch7cqjdh8crjeh}fsf9csj~f!ctj#cujTb$cvjUb%cwjVb'cxjfhagghbghhcgWbXb(cyjYb)czjZb*cAj0b+cBj,cCj-cDj.cEj/cFj:cGj;cHj=cIj?cJjihdgjhegVhfgWhggXhhgkhiglhjgmhkgnhlgohmgphqhngrhog6 shpg7 YhqgZhrg! thsguhvhtgwhugxhvgyhwg{e|e5l6l7l8l9l[i}e!l~eafbf#lcfxg$lyg]i%l'ldfef@c[c]c^c_c`cL KjC LjU V W X Y Z 0 1 Mj8 IbJb(l)l*l+l,l-l.l/l:l;l0h1h2h3h4h5h1b2b3b4b5b6b6h7h8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgflezhyfzf=i?iAfBfAgBguiejmefjgjUf3chjijneB ffCf9b!bjjkjljmjAcBcCc~ NjCgOjDgPj0fEgQjFgRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$jGg%jHgoe'jIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g(j3g)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jak4gbk5gpeck6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbbdk@gek[gfk]ggk^ghk_gik`gjk{gkk|g=l9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfDfEf2fQlkbRlWfebfbah3f6fQ Mblb$bFfqere}gseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

114  

115 @classmethod 

116 def _legacy_default(cls) -> Stream: 

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

118 return Stream._from_handle(cls, get_legacy_stream()) 2KcQl

119  

120 @classmethod 

121 def _per_thread_default(cls) -> Stream: 

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

123 return Stream._from_handle(cls, get_per_thread_stream()) 2KcRl

124  

125 @classmethod 

126 @cython.annotation_typing(False) 

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

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

129 cdef StreamHandle h_stream 

130 cdef cydriver.CUstream borrowed 

131 cdef ContextHandle h_context 

132  

133 # Extract context handle if provided 

134 if ctx is not None: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDg0fEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|g9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfJkKklkammkDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

135 h_context = (<Context>ctx)._h_context 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfb3f6fQ Mblb$bFfqere}gse%b

136  

137 if obj is not None and options is not None: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDg0fEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|g9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfJkKklkammkDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

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

139 if obj is not None: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDg0fEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|g9f!fhbFeVf#bLbcb4fibjbA O ~g#f$fdb1f5fhfJkKklkmkDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

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) 2P 0f9f!fhbFecbibjbA O ~gdbhfJkKklkmkkbfbMb

144 h_stream = create_stream_handle_with_owner(borrowed, obj) 2P 0f9f!fFecbibjbA O ~gdbhfkbfb

145 return Stream._from_handle(cls, h_stream) 2P 0f9f!fFecbibjbA O ~gdbhfkbfb

146  

147 cdef StreamOptions opts = check_or_create_options(StreamOptions, options, "Stream options") 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

148 nonblocking = opts.nonblocking 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

149 priority = opts.priority 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

150  

151 cdef unsigned int flags = (cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING if nonblocking 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

152 else cydriver.CUstream_flags.CU_STREAM_DEFAULT) 2@i

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

154 cdef int high, low 

155 cdef cydriver.CUresult res_code 

156 with nogil: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

157 res_code = cydriver.cuCtxGetStreamPriorityRange(&high, &low) 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

158 if res_code != cydriver.CUresult.CUDA_SUCCESS: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

159 if res_code == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 

160 raise RuntimeError( 

161 "No current CUDA context. Call dev.set_current() before creating streams." 

162 ) 

163 HANDLE_RETURN(res_code) 

164 cdef int prio 

165 if priority is not None: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

166 prio = priority 2O DfEfWf

167 if not (low <= prio <= high): 2O DfEfWf

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

169 else: 

170 prio = high 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA #f$fdb1f5fhf2fkbebfbah3f6fQ Mblb$bFfqere}gse%b

171  

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

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

174 h_stream = create_stream_handle(h_context, flags, prio) 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

175 if not h_stream: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc@i8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

176 res_code = get_last_error() 2@i

177 if not nonblocking and res_code == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE: 2@i

178 # cuGreenCtxStreamCreate rejects CU_STREAM_DEFAULT; 

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

180 raise ValueError( 2@i

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

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

183 ) 

184 elif res_code == cydriver.CUresult.CUDA_ERROR_NOT_SUPPORTED: 

185 raise RuntimeError( 

186 "cuGreenCtxStreamCreate is not available. " 

187 "Green context stream creation requires CUDA 12.5 or newer." 

188 ) 

189 else: 

190 HANDLE_RETURN(res_code) 

191 cdef Stream self = Stream._from_handle(cls, h_stream) 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

192 self._nonblocking = int(nonblocking) 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

193 self._priority = prio 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

194 if device_id is not None: 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

195 self._device_id = device_id 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

196 return self 2# =f?fZfZc0c1c2c@fmbifx D gbE jf[f]fy kf$ lf^fv wbGf_fz % `fLcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enb7fMcob7e8eXf9e'b(bNb!eYf#e)b*bOb+b,b-b.b/bpb$e:b;b=b?b@b[b%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcrb,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcuctb^e_eubK vbvc`enfofpfqfrfEew Pb4c5cQb6cRb{fSb|f7c8c}fsf9c~f!c#cTb$cUb%cVb'cagbgcgWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cdgegfggghgigjgkglgmgngog6 pg7 qgrg! sgtgugvgwg{e|e}e~eafbfcfxgygdfef@c[c]c^c_c`cL C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b8fHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R IfJfKfLfMfNfOfzgPfQfRfSfKb7bwcxcyc8bS zcT P {c|c}c~ctfufvfwfxfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejekeTfgfleyfzfAfBfAgBgmeUf3cneB ffCf9b!bAcBcCc~ CgDgEgFgGgHgoeIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3g4g5gpe6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:g;g=g?gabbb@g[g]g^g_g`g{g|ghbVf#bLbcb4fibjbA O #f$fdb1f5fhfDfEf2fkbWfebfbah3f6fQ Mblb$bFfqere}gse%b

197  

198 cpdef close(self): 

199 """Destroy the stream. 

200  

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

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

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

204  

205 .. warning:: 

206 Do not close :obj:`LEGACY_DEFAULT_STREAM` or 

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

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

209 """ 

210 self._h_stream.reset() 2wbGfxb9 njojpjEmFmqjrjGmsjtjujvjwjxjHmImJmyjzjAjBjCjDjEjFjGjHjIjJjKmLmMmNmOmPmQmRmSmTmUmVm6 Wm7 XmYm! Zm0m1m2m3mKbgf9b!b`l9f!fhbFeO hflb$bFfqerese

211  

212 @property 

213 def is_closed(self) -> bool: 

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

215 return self._h_stream.get() == NULL 2`l9f!fhbFe

216  

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

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

219 Stream_check_open(self) 2P hbFeA

220 return (0, as_intptr(self._h_stream)) 2P FeA

221  

222 def __hash__(self) -> int: 

223 return hash(as_intptr(self._h_stream)) 20f4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mbmcm`mSlcbA $fdb1ffb

224  

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

226 if not isinstance(other, Stream): 2~l0femfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmbmcmSlcb4fibjbA db1f5fkbfb6f

227 return NotImplemented 2~lemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBm6f

228 return as_intptr(self._h_stream) == as_intptr((<Stream>other)._h_stream) 2~l0fCmbmcmSlcb4fibjbA db1f5fkbfb

229  

230 def __repr__(self) -> str: 

231 cdef ContextHandle h_context 

232 if not self._h_stream: 2# nbMcobpbqb4 rbsb5 tbubL C U V W X Y Z 0 1 %fyb'fzb(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb`lPl

233 return "<Stream handle=0x0 context=0x0>" 2`l

234 Stream_get_ctx(self, &h_context) 2# nbMcobpbqb4 rbsb5 tbubL C U V W X Y Z 0 1 %fyb'fzb(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbPl

235 return f"<Stream handle={as_intptr(self._h_stream):#x} context={as_intptr(h_context):#x}>" 2# nbMcobpbqb4 rbsb5 tbubL C U V W X Y Z 0 1 %fyb'fzb(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbPl

236  

237 @property 

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

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

240  

241 .. caution:: 

242  

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

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

245 """ 

246 return as_py(self._h_stream) 2mbD gbE a b c d e f g h i j k l m n o p F q r s t u G H I J 7fMcXfNbYfObK w 8ftfufvfwfxfgfzhyfzf=i?iAfBf3c`l~l0fFecbibjbO #fdbhfkbfblbqerese%b

247  

248 @property 

249 def is_nonblocking(self) -> bool: 

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

251 Stream_check_open(self) 2O DfEf2f

252 cdef unsigned int flags 

253 if self._nonblocking == -1: 2O DfEf2f

254 with nogil: 1O

255 HANDLE_RETURN(cydriver.cuStreamGetFlags(as_cu(self._h_stream), &flags)) 1O

256 self._nonblocking = flags & cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING 1O

257 return bool(self._nonblocking) 2O DfEf2f

258  

259 @property 

260 def priority(self) -> int: 

261 """Return the stream priority.""" 

262 Stream_check_open(self) 2O DfEfWf

263 cdef int prio 

264 if self._priority == INT32_MIN: 2O DfEfWf

265 with nogil: 1O

266 HANDLE_RETURN(cydriver.cuStreamGetPriority(as_cu(self._h_stream), &prio)) 1O

267 self._priority = prio 1O

268 return self._priority 2O DfEfWf

269  

270 def sync(self) -> None: 

271 """Synchronize the stream.""" 

272 Stream_check_open(self) 2# Zc0c1c2cmbD E $ v wb% Lcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbMcob7e8eokXf9e'b(bNb!eYf#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%e' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`ePbnjbhojQbpjRbSbchqjdhrjehsjtjujTbvjUbOlwjVbxjfhghhhWbXbyjYbzjZbAj0bBjCjDjEjFjGjHjIjJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|e}e~evkafbfcfwkxkdfefykzkAkDcBkEcCkDkKjLjMj%fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7h2 M 3 N wcxcycS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitizhuiff9b!bAcBcCcNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkkhb3fQ lb$bqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

273 with nogil: 2# Zc0c1c2cmbD E $ v wb% Lcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbMcob7e8eokXf9e'b(bNb!eYf#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%e' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`ePbnjbhojQbpjRbSbchqjdhrjehsjtjujTbvjUbOlwjVbxjfhghhhWbXbyjYbzjZbAj0bBjCjDjEjFjGjHjIjJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|e}e~evkafbfcfwkxkdfefykzkAkDcBkEcCkDkKjLjMj%fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7h2 M 3 N wcxcycS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitizhuiff9b!bAcBcCcNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkk3fQ lb$bqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

274 HANDLE_RETURN(cydriver.cuStreamSynchronize(as_cu(self._h_stream))) 2# Zc0c1c2cmbD E $ v wb% Lcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbMcob7e8eokXf9e'b(bNb!eYf#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%e' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`ePbnjbhojQbpjRbSbchqjdhrjehsjtjujTbvjUbOlwjVbxjfhghhhWbXbyjYbzjZbAj0bBjCjDjEjFjGjHjIjJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|e}e~evkafbfcfwkxkdfefykzkAkDcBkEcCkDkKjLjMj%fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7h2 M 3 N wcxcycS 8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitizhuiff9b!bAcBcCcNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkk3fQ lb$bqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

275  

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

277 """Record an event onto the stream. 

278  

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

280 recording on the stream. 

281  

282 Parameters 

283 ---------- 

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

285 Optional event object to be reused for recording. 

286 options : :obj:`EventOptions`, optional 

287 Customizable dataclass for event creation options. 

288  

289 Returns 

290 ------- 

291 :obj:`~_event.Event` 

292 Newly created event object. 

293  

294 Note 

295 ---- 

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

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

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

299 associated with the current context at call time. 

300  

301 """ 

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

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

304 # and CU_EVENT_RECORD_EXTERNAL, can be set in EventOptions. 

305 Stream_check_open(self) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 IbJbHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbhbebQ

306 cdef ContextHandle h_context 

307 cdef int device_id 

308 cdef cyEvent event_obj 

309 if event is None: 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 IbJbHf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

310 Stream_get_ctx_device(self, &h_context, &device_id) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 IbJb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

311 event_obj = cyEvent._init(cyEvent, device_id, h_context, options, False) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 IbJb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

312 else: 

313 event_obj = Event_accept(event) 28 Hf

314 if event is not None and event_obj.is_ipc_enabled: 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

315 raise TypeError( 18

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

317 "new event by supplying options." 

318 ) 

319  

320 cdef cydriver.CUevent e = as_cu(event_obj._h_event) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

321 with nogil: 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

322 HANDLE_RETURN(cydriver.cuEventRecord(e, as_cu(self._h_stream))) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

323 return event_obj 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ

324  

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

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

327  

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

329  

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

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

332 on the stream and then waiting on it. 

333  

334 Parameters 

335 ---------- 

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

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

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

339 streams. 

340  

341 """ 

342 Stream_check_open(self) 2x y v z a b c d e f g h i j k l m n o p q r s t u w HfQ Mb

343 cdef Stream stream 

344 cdef cyEvent event 

345 cdef EventHandle h_event 

346  

347 # Handle Event directly 

348 if isinstance(event_or_stream, Event): 2x y v z a b c d e f g h i j k l m n o p q r s t u w HfQ Mb

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

350 with nogil: 1xyvzabcdefghijklmnopqrstuwQ

351 # TODO: support flags other than 0? 

352 HANDLE_RETURN(cydriver.cuStreamWaitEvent( 1xyvzabcdefghijklmnopqrstuwQ

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

354 return 1xyvzabcdefghijklmnopqrstuwQ

355  

356 # Convert to Stream if needed 

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

358 stream = <Stream>event_or_stream 1xyvzabcdefghijklmnopqrstuw

359 Stream_check_open(stream) 1xyvzabcdefghijklmnopqrstuw

360 else: 

361 try: 2Mb

362 stream = Stream._init(obj=event_or_stream) 2Mb

363 except Exception as e: 2Mb

364 raise ValueError( 2Mb

365 "only an Event, Stream, or object supporting __cuda_stream__ can be waited," 2Mb

366 f" got {type(event_or_stream)}" 2Mb

367 ) from e 2Mb

368  

369 # Wait on stream via temporary event 

370 with nogil: 1xyvzabcdefghijklmnopqrstuw

371 h_event = create_event_handle_noctx(cydriver.CUevent_flags.CU_EVENT_DISABLE_TIMING) 1xyvzabcdefghijklmnopqrstuw

372 HANDLE_RETURN(cydriver.cuEventRecord(as_cu(h_event), as_cu(stream._h_stream))) 1xyvzabcdefghijklmnopqrstuw

373 # TODO: support flags other than 0? 

374 HANDLE_RETURN(cydriver.cuStreamWaitEvent(as_cu(self._h_stream), as_cu(h_event), 0)) 1xyvzabcdefghijklmnopqrstuw

375  

376 @property 

377 def device(self) -> Device: 

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

379  

380 Note 

381 ---- 

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

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

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

385 the current context at call time. 

386  

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

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

389 set current after the stream is created. 

390  

391 """ 

392 Stream_check_open(self) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcC ybFcGcHcIczbJcAbBbCbDbEbFbGbHbT uevewexeyezeAeBeB CeDeLbA

393 from cuda.core._device import Device # avoid circular import 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcC ybFcGcHcIczbJcAbBbCbDbEbFbGbHbT uevewexeyezeAeBeB CeDeLbA

394 cdef ContextHandle h_context 

395 cdef int device_id 

396 Stream_get_ctx_device(self, &h_context, &device_id) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcC ybFcGcHcIczbJcAbBbCbDbEbFbGbHbT uevewexeyezeAeBeB CeDeLbA

397 return Device(device_id) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcC ybFcGcHcIczbJcAbBbCbDbEbFbGbHbT uevewexeyezeAeBeB CeDeLbA

398  

399 @property 

400 def context(self) -> Context: 

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

402  

403 Note 

404 ---- 

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

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

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

408 context at call time. 

409  

410 """ 

411 Stream_check_open(self) 2D gbE a b c d e f g h i j k l m n o p F q r s t u G H I J K w 1b2b3b4b5b6b8bS #bA

412 cdef ContextHandle h_context 

413 cdef int device_id 

414 Stream_get_ctx_device(self, &h_context, &device_id) 2D gbE a b c d e f g h i j k l m n o p F q r s t u G H I J K w 1b2b3b4b5b6b8bS #bA

415 return Context._from_handle(Context, h_context, device_id) 2D gbE a b c d e f g h i j k l m n o p F q r s t u G H I J K w 1b2b3b4b5b6b8bS #bA

416  

417 @property 

418 def resources(self) -> DeviceResources: 

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

420  

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

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

423 context, returns the full device resources. 

424  

425 Note 

426 ---- 

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

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

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

430 context at call time. 

431  

432 """ 

433 Stream_check_open(self) 2Kb7b

434 cdef ContextHandle h_context 

435 cdef int device_id 

436 Stream_get_ctx_device(self, &h_context, &device_id) 2Kb7b

437 return DeviceResources._init_from_ctx(h_context, device_id) 2Kb7b

438  

439 @staticmethod 

440 def from_handle(handle) -> Stream: 

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

442  

443 Uses a cudaStream_t pointer address represented as a Python int 

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

445  

446 Note 

447 ---- 

448 Stream lifetime is not managed, foreign object must remain 

449 alive while this stream is active. 

450  

451 Parameters 

452 ---------- 

453 handle : int 

454 Stream handle representing the address of a foreign 

455 stream object. 

456  

457 Returns 

458 ------- 

459 :obj:`~_stream.Stream` 

460 Newly created stream object. 

461  

462 """ 

463  

464 class _stream_holder: 20f9f!fFecbibjbO ~gdbkbfb

465 def __cuda_stream__(self) -> tuple[int, int]: 20f9f!fFecbibjbO ~gdbkbfb

466 return (0, handle) 20f9f!fFecbibjbO ~gdbkbfb

467  

468 return Stream._init(obj=_stream_holder()) 20f9f!fFecbibjbO ~gdbkbfb

469  

470 def create_graph_builder(self) -> GraphBuilder: 

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

472  

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

474  

475 Returns 

476 ------- 

477 :obj:`~graph.GraphBuilder` 

478 Newly created graph builder object. 

479  

480 """ 

481 Stream_check_open(self) 2# ZfZc0c1c2c$ wb% xb9 NcOcPcQcRcSc' ( ) * + , - . / 6 7 ! hb

482 from cuda.core.graph._graph_builder import GraphBuilder 2# ZfZc0c1c2c$ wb% xb9 NcOcPcQcRcSc' ( ) * + , - . / 6 7 !

483  

484 return GraphBuilder._init(self) 2# ZfZc0c1c2c$ wb% xb9 NcOcPcQcRcSc' ( ) * + , - . / 6 7 !

485  

486  

487LEGACY_DEFAULT_STREAM: Stream = Stream._legacy_default() 

488PER_THREAD_DEFAULT_STREAM: Stream = Stream._per_thread_default() 

489  

490  

491cpdef Stream default_stream(): 

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

493  

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

495 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set. 

496  

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

498 the legacy stream. 

499  

500 """ 

501 # TODO: flip the default 

502 cdef const char* use_ptds_raw = getenv("CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM") 2mbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J nkok'b(bNbpkqkrk)b*bObsk+b,b-b.btkuk/b:b;b=b?b@b[bAh' ]b( ) * ^b+ , - . / 4 _b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShccdcecfcgchcicjckclcmcncocpcqcrc5 sctcThUhucK vbvcLkMktePb4cbh5cQb6cRbSbch7cdh8ceh9c!c#cTb$cUb%cVb'cfhghhhWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyhNkOkPkQkRkSk[iTkvkUkwkVkxk]iWkXk@c[c]c^c_c`cykzkAkDcBkEcCkDk{l|lL C %fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N wcxcyc8hzc9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~c_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjke}lYkZklezh0k1k=i?iuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgj3chjijne(kAeBeB CeDe9b!bjjkjljmjAcBcCc)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelfloeglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlpeElFlGlHlIlJlKlLlMlNlSl?llb$bviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

503  

504 cdef int use_ptds = 0 2mbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J nkok'b(bNbpkqkrk)b*bObsk+b,b-b.btkuk/b:b;b=b?b@b[bAh' ]b( ) * ^b+ , - . / 4 _b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShccdcecfcgchcicjckclcmcncocpcqcrc5 sctcThUhucK vbvcLkMktePb4cbh5cQb6cRbSbch7cdh8ceh9c!c#cTb$cUb%cVb'cfhghhhWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyhNkOkPkQkRkSk[iTkvkUkwkVkxk]iWkXk@c[c]c^c_c`cykzkAkDcBkEcCkDk{l|lL C %fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N wcxcyc8hzc9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~c_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjke}lYkZklezh0k1k=i?iuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgj3chjijne(kAeBeB CeDe9b!bjjkjljmjAcBcCc)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelfloeglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlpeElFlGlHlIlJlKlLlMlNlSl?llb$bviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

505 if use_ptds_raw != NULL: 2mbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J nkok'b(bNbpkqkrk)b*bObsk+b,b-b.btkuk/b:b;b=b?b@b[bAh' ]b( ) * ^b+ , - . / 4 _b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShccdcecfcgchcicjckclcmcncocpcqcrc5 sctcThUhucK vbvcLkMktePb4cbh5cQb6cRbSbch7cdh8ceh9c!c#cTb$cUb%cVb'cfhghhhWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyhNkOkPkQkRkSk[iTkvkUkwkVkxk]iWkXk@c[c]c^c_c`cykzkAkDcBkEcCkDk{l|lL C %fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N wcxcyc8hzc9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~c_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjke}lYkZklezh0k1k=i?iuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgj3chjijne(kAeBeB CeDe9b!bjjkjljmjAcBcCc)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelfloeglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlpeElFlGlHlIlJlKlLlMlNlSl?llb$bviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

506 use_ptds = strtol(use_ptds_raw, NULL, 10) 2?l

507  

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

509 if use_ptds: 2mbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J nkok'b(bNbpkqkrk)b*bObsk+b,b-b.btkuk/b:b;b=b?b@b[bAh' ]b( ) * ^b+ , - . / 4 _b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShccdcecfcgchcicjckclcmcncocpcqcrc5 sctcThUhucK vbvcLkMktePb4cbh5cQb6cRbSbch7cdh8ceh9c!c#cTb$cUb%cVb'cfhghhhWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyhNkOkPkQkRkSk[iTkvkUkwkVkxk]iWkXk@c[c]c^c_c`cykzkAkDcBkEcCkDk{l|lL C %fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N wcxcyc8hzc9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~c_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjke}lYkZklezh0k1k=i?iuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgj3chjijne(kAeBeB CeDe9b!bjjkjljmjAcBcCc)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelfloeglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlpeElFlGlHlIlJlKlLlMlNlSl?llb$bviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

510 return PER_THREAD_DEFAULT_STREAM 2?l

511 else: 

512 return LEGACY_DEFAULT_STREAM 2mbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J nkok'b(bNbpkqkrk)b*bObsk+b,b-b.btkuk/b:b;b=b?b@b[bAh' ]b( ) * ^b+ , - . / 4 _b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShccdcecfcgchcicjckclcmcncocpcqcrc5 sctcThUhucK vbvcLkMktePb4cbh5cQb6cRbSbch7cdh8ceh9c!c#cTb$cUb%cVb'cfhghhhWbXb(cYb)cZb*c0b+c,c-c.c/c:c;c=c?cihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyhNkOkPkQkRkSk[iTkvkUkwkVkxk]iWkXk@c[c]c^c_c`cykzkAkDcBkEcCkDk{l|lL C %fybTlEkFkUlVlGkHkWlXl'fIkYlZlFcGc0l1lHcIc2l3lzbJc4l(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N wcxcyc8hzc9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~c_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjke}lYkZklezh0k1k=i?iuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgj3chjijne(kAeBeB CeDe9b!bjjkjljmjAcBcCc)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelfloeglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlpeElFlGlHlIlJlKlLlMlNlSl?llb$bviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

513  

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

515 """Return True for CU_STREAM_LEGACY and CU_STREAM_PER_THREAD. 

516  

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

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

519 """ 

520 cdef uintptr_t h = <uintptr_t>as_cu(self._h_stream) 2# x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J nbMcobpbqb4 rbsb5 tbubK w teDcEcL C U V W X Y Z 0 1 8 IbJb%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbbPl#bLbA ebQ

521 return h == <uintptr_t>cydriver.CU_STREAM_LEGACY or h == <uintptr_t>cydriver.CU_STREAM_PER_THREAD 2# x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J nbMcobpbqb4 rbsb5 tbubK w teDcEcL C U V W X Y Z 0 1 8 IbJb%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbbPl#bLbA ebQ

522  

523  

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

525 """Return True only for CU_STREAM_LEGACY. 

526  

527 Unlike CU_STREAM_PER_THREAD, the legacy default stream token is rejected 

528 outright (CUDA_ERROR_INVALID_VALUE) by cuMemcpyWithAttributesAsync and 

529 cuMemcpyBatchAsync; CU_STREAM_PER_THREAD is a real stream to those entry 

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

531 Stream_is_default_token, wherever that distinction matters. 

532 """ 

533 return <uintptr_t>as_cu(self._h_stream) == <uintptr_t>cydriver.CU_STREAM_LEGACY 2PbbhQbRbSbchdhehsf@lTbUbOlVbfhghhhWbXbYbZb0b[l]l^lihjhkhlhmhnhohphqhrh6 sh7 thuhvhwhxhyh

534  

535  

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

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

538 cdef cydriver.CUcontext ctx 

539 cdef bint is_default = Stream_is_default_token(self) 2# x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J nbMcobpbqb4 rbsb5 tbubK w teDcEcL C U V W X Y Z 0 1 8 IbJb%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbbPl#bLbA ebQ

540  

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

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

543 if self._h_context and not is_default: 2# x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J nbMcobpbqb4 rbsb5 tbubK w teDcEcL C U V W X Y Z 0 1 8 IbJb%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbbPl#bLbA ebQ

544 h_context[0] = self._h_context 2# x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J nbMcobpbqb4 rbsb5 tbubK w L C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T B ~ abbbPl#bLbA ebQ

545 return 0 2# x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J nbMcobpbqb4 rbsb5 tbubK w L C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T B ~ abbbPl#bLbA ebQ

546  

547 h_context[0] = get_stream_context(self._h_stream) 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

548 if not h_context[0]: 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

549 HANDLE_RETURN(cydriver.cuStreamGetCtx(as_cu(self._h_stream), &ctx)) 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

550 if ctx != NULL: 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

551 with gil: 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

552 h_context[0] = create_context_handle_ref(ctx) 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

553  

554 if h_context[0] and not is_default: 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

555 self._h_context = h_context[0] 

556 return 0 2teDcEc%fyb'fFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHbuevewexeyezeAeBeB CeDe

557  

558  

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

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

561 cdef cydriver.CUcontext ctx 

562 cdef cydriver.CUdevice target_dev 

563 cdef ContextHandle current_context 

564 cdef bint switch_context 

565 cdef bint is_default = Stream_is_default_token(self) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcL C U V W X Y Z 0 1 8 IbJbybFcGcHcIczbJcAbBbCbDbEbFbGbHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbb#bLbA ebQ

566  

567 with nogil: 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcL C U V W X Y Z 0 1 8 IbJbybFcGcHcIczbJcAbBbCbDbEbFbGbHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbb#bLbA ebQ

568 Stream_get_ctx(self, h_context) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcL C U V W X Y Z 0 1 8 IbJbybFcGcHcIczbJcAbBbCbDbEbFbGbHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbb#bLbA ebQ

569 if self._device_id >= 0 and not is_default: 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcL C U V W X Y Z 0 1 8 IbJbybFcGcHcIczbJcAbBbCbDbEbFbGbHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbb#bLbA ebQ

570 device_id[0] = self._device_id 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w L C U V W X Y Z 0 1 8 IbJb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T B ~ abbb#bLbA ebQ

571 else: 

572 # Get device ID from context, switching context temporarily if needed 

573 current_context = get_current_context() 2teDcEcybFcGcHcIczbJcAbBbCbDbEbFbGbHbuevewexeyezeAeBeB CeDeA

574 switch_context = (as_cu(current_context) != as_cu(h_context[0])) 2teDcEcybFcGcHcIczbJcAbBbCbDbEbFbGbHbuevewexeyezeAeBeB CeDeA

575 if switch_context: 2teDcEcybFcGcHcIczbJcAbBbCbDbEbFbGbHbuevewexeyezeAeBeB CeDeA

576 HANDLE_RETURN(cydriver.cuCtxPushCurrent(as_cu(h_context[0]))) 

577 HANDLE_RETURN(cydriver.cuCtxGetDevice(&target_dev)) 2teDcEcybFcGcHcIczbJcAbBbCbDbEbFbGbHbuevewexeyezeAeBeB CeDeA

578 if switch_context: 2teDcEcybFcGcHcIczbJcAbBbCbDbEbFbGbHbuevewexeyezeAeBeB CeDeA

579 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&ctx)) 

580 device_id[0] = <int>target_dev 2teDcEcybFcGcHcIczbJcAbBbCbDbEbFbGbHbuevewexeyezeAeBeB CeDeA

581 if not is_default: 2teDcEcybFcGcHcIczbJcAbBbCbDbEbFbGbHbuevewexeyezeAeBeB CeDeA

582 self._device_id = device_id[0] 1A

583 return 0 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w teDcEcL C U V W X Y Z 0 1 8 IbJbybFcGcHcIczbJcAbBbCbDbEbFbGbHb1b2b3b4b5b6b2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Kb7b8bS T uevewexeyezeAeBeB CeDe~ abbb#bLbA ebQ

584  

585  

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

587 if isinstance(obj, Stream): 2P 0f9f!fhbFecbibjbA O ~gdbhfJkKklkmkkbfbMb

588 Stream_check_open(<Stream>obj) 2hf

589 return as_cu((<Stream>obj)._h_stream) 2hf

590  

591 try: 2P 0f9f!fhbFecbibjbA O ~gdbJkKklkmkkbfbMb

592 cuda_stream_attr = obj.__cuda_stream__ 2P 0f9f!fhbFecbibjbA O ~gdbJkKklkmkkbfbMb

593 except AttributeError: 2Mb

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

595  

596 if callable(cuda_stream_attr): 2P 0f9f!fhbFecbibjbA O ~gdbJkKklkmkkbfb

597 info = cuda_stream_attr() 2P 0f9f!fhbFecbibjbA O ~gdbJkKklkkbfb

598 else: 

599 info = cuda_stream_attr 2mk

600 warnings.warn( 2mk

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

602 stacklevel=3, 

603 category=DeprecationWarning, 2mk

604 ) 

605  

606 try: 2P 0f9f!fFecbibjbA O ~gdbJkKklkmkkbfb

607 len_info = len(info) 2P 0f9f!fFecbibjbA O ~gdbJkKklkmkkbfb

608 except TypeError as e: 2Jk

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

610 if len_info != 2: 2P 0f9f!fFecbibjbA O ~gdbKklkmkkbfb

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

612 if info[0] != 0: 2P 0f9f!fFecbibjbA O ~gdblkkbfb

613 raise RuntimeError( 2lk

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

615 ) 

616 return <cydriver.CUstream><uintptr_t>(info[1]) 2P 0f9f!fFecbibjbA O ~gdbkbfb

617  

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

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

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

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

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

623 from cuda.core.graph._graph_builder import GraphBuilder 2# Zc0c1c2cmbifx D E jfy kf$ lfv wbGfz % Lcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbob7e8eok9e'b(bNb!e#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew LkMktePb4cnjbh5cojQb6cpjRbSbch7cqjdh8crjehsf9csj!ctj@l#cujTb$cvjUbOl%cwjVb'cxjfhghhhWbXb(cyjYb)czjZb*cAj0b+cBj,cCj[l-cDj]l.cEj^l/cFj:cGj;cHj=cIj?cJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|eNkOkPkQkRkSk[i}eTk~evkafbfUkcfwkVkxk]iWkXkdfef@c[c]c^c_c`cykzkAkDcBkEcCkDkL KjC LjMj%fybEkFkGkHk'fIkFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N R IfJfKfLfMfNfOfPfQfRfSfwcxcyc8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgfYkZklezh0k1kyfzf=i?iAfBfuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgjUf3chjijne(kAeBeB CeDeffCf9b!bjjkjljmjAcBcCcNj)k*kOj+kPj,kQj-kRj.kSj/kTj:kUj;kVj=kWj?kXj@kYj[kZj]k0j^k1j_k2j`k3j{k4j|k5j}k6j~k7jal8jbl9jcl!jdl#jel$jfl%joe'jgl(jhl)jil*jjl+jkl,jll-jml.jnl/jol:jpl;jql=jrl?jsl@jtl[jul]jvl^jwl_jxl`jyl{jzl|jAl}jBl~jClakDlbkpeckElFlGldkHlekIlfkJlgkKlhkLlikMljkNlkkhbFeVfdmlb_l$bFfqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

624  

625 cdef Stream stream 

626 if arg is None: 2# Zc0c1c2cmbifx D E jfy kf$ lfv wbGfz % Lcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbob7e8eok9e'b(bNb!e#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew LkMktePb4cnjbh5cojQb6cpjRbSbch7cqjdh8crjehsf9csj!ctj@l#cujTb$cvjUbOl%cwjVb'cxjfhghhhWbXb(cyjYb)czjZb*cAj0b+cBj,cCj[l-cDj]l.cEj^l/cFj:cGj;cHj=cIj?cJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|eNkOkPkQkRkSk[i}eTk~evkafbfUkcfwkVkxk]iWkXkdfef@c[c]c^c_c`cykzkAkDcBkEcCkDkL KjC LjMj%fybEkFkGkHk'fIkFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N R IfJfKfLfMfNfOfPfQfRfSfwcxcyc8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgfYkZklezh0k1kyfzf=i?iAfBfuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgjUf3chjijne(kAeBeB CeDeffCf9b!bjjkjljmjAcBcCcNj)k*kOj+kPj,kQj-kRj.kSj/kTj:kUj;kVj=kWj?kXj@kYj[kZj]k0j^k1j_k2j`k3j{k4j|k5j}k6j~k7jal8jbl9jcl!jdl#jel$jfl%joe'jgl(jhl)jil*jjl+jkl,jll-jml.jnl/jol:jpl;jql=jrl?jsl@jtl[jul]jvl^jwl_jxl`jyl{jzl|jAl}jBl~jClakDlbkpeckElFlGldkHlekIlfkJlgkKlhkLlikMljkNlkkhbFeVfdmlb_l$bFfqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

627 raise TypeError( 2Cfdm

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

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

630 ) 

631 if isinstance(arg, Stream): 2# Zc0c1c2cmbifx D E jfy kf$ lfv wbGfz % Lcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbob7e8eok9e'b(bNb!e#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`enfofpfqfrfEew LkMktePb4cnjbh5cojQb6cpjRbSbch7cqjdh8crjehsf9csj!ctj@l#cujTb$cvjUbOl%cwjVb'cxjfhghhhWbXb(cyjYb)czjZb*cAj0b+cBj,cCj[l-cDj]l.cEj^l/cFj:cGj;cHj=cIj?cJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|eNkOkPkQkRkSk[i}eTk~evkafbfUkcfwkVkxk]iWkXkdfef@c[c]c^c_c`cykzkAkDcBkEcCkDkL KjC LjMj%fybEkFkGkHk'fIkFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N R IfJfKfLfMfNfOfPfQfRfSfwcxcyc8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgfYkZklezh0k1kyfzf=i?iAfBfuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgjUf3chjijne(kAeBeB CeDeffCf9b!bjjkjljmjAcBcCcNj)k*kOj+kPj,kQj-kRj.kSj/kTj:kUj;kVj=kWj?kXj@kYj[kZj]k0j^k1j_k2j`k3j{k4j|k5j}k6j~k7jal8jbl9jcl!jdl#jel$jfl%joe'jgl(jhl)jil*jjl+jkl,jll-jml.jnl/jol:jpl;jql=jrl?jsl@jtl[jul]jvl^jwl_jxl`jyl{jzl|jAl}jBl~jClakDlbkpeckElFlGldkHlekIlfkJlgkKlhkLlikMljkNlkkhbFeVflb_l$bFfqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

632 stream = <Stream>arg 2# Zc0c1c2cmbD E $ v wbGf% Lcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbob7e8eok9e'b(bNb!e#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`eEeLkMktePb4cnjbh5cojQb6cpjRbSbch7cqjdh8crjehsf9csj!ctj@l#cujTb$cvjUbOl%cwjVb'cxjfhghhhWbXb(cyjYb)czjZb*cAj0b+cBj,cCj[l-cDj]l.cEj^l/cFj:cGj;cHj=cIj?cJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|eNkOkPkQkRkSk[i}eTk~evkafbfUkcfwkVkxk]iWkXkdfef@c[c]c^c_c`cykzkAkDcBkEcCkDkL KjC LjMj%fybEkFkGkHk'fIkFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N R IfJfKfLfMfNfOfPfQfRfSfwcxcyc8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgfYkZklezh0k1kyfzf=i?iAfBfuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgjUf3chjijne(kAeBeB CeDeffCf9b!bjjkjljmjAcBcCcNj)k*kOj+kPj,kQj-kRj.kSj/kTj:kUj;kVj=kWj?kXj@kYj[kZj]k0j^k1j_k2j`k3j{k4j|k5j}k6j~k7jal8jbl9jcl!jdl#jel$jfl%joe'jgl(jhl)jil*jjl+jkl,jll-jml.jnl/jol:jpl;jql=jrl?jsl@jtl[jul]jvl^jwl_jxl`jyl{jzl|jAl}jBl~jClakDlbkpeckElFlGldkHlekIlfkJlgkKlhkLlikMljkNlkkhbFelb$bFfqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

633 Stream_check_open(stream) 2# Zc0c1c2cmbD E $ v wbGf% Lcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbob7e8eok9e'b(bNb!e#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`eEeLkMktePb4cnjbh5cojQb6cpjRbSbch7cqjdh8crjehsf9csj!ctj@l#cujTb$cvjUbOl%cwjVb'cxjfhghhhWbXb(cyjYb)czjZb*cAj0b+cBj,cCj[l-cDj]l.cEj^l/cFj:cGj;cHj=cIj?cJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|eNkOkPkQkRkSk[i}eTk~evkafbfUkcfwkVkxk]iWkXkdfef@c[c]c^c_c`cykzkAkDcBkEcCkDkL KjC LjMj%fybEkFkGkHk'fIkFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N R IfJfKfLfMfNfOfPfQfRfSfwcxcyc8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgfYkZklezh0k1kyfzf=i?iAfBfuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgjUf3chjijne(kAeBeB CeDeffCf9b!bjjkjljmjAcBcCcNj)k*kOj+kPj,kQj-kRj.kSj/kTj:kUj;kVj=kWj?kXj@kYj[kZj]k0j^k1j_k2j`k3j{k4j|k5j}k6j~k7jal8jbl9jcl!jdl#jel$jfl%joe'jgl(jhl)jil*jjl+jkl,jll-jml.jnl/jol:jpl;jql=jrl?jsl@jtl[jul]jvl^jwl_jxl`jyl{jzl|jAl}jBl~jClakDlbkpeckElFlGldkHlekIlfkJlgkKlhkLlikMljkNlkkhbFelb$bFfqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

634 return stream 2# Zc0c1c2cmbD E $ v wb% Lcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J GeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6enknbob7e8eok9e'b(bNb!e#epkqkrk)b*bObsk+b,b-b.btkuk/bpb$e:b;b=b?b@b[bAh%eNcOcPcQcRcSc' ]b( ) * ^b+ , - . / TcUcVcWcXcYcqb4 'e(e)e*e+e_b`b{b|b}b~bacbcBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhrbRhSh,e-e.e/e:eccdcecfcgchcicjc;e=e?e@e[e]ekclcmcncocpcqcrcsb5 sctcThUhuctb^e_eubK vbvc`eEeLkMktePb4cnjbh5cojQb6cpjRbSbch7cqjdh8crjehsf9csj!ctj@l#cujTb$cvjUbOl%cwjVb'cxjfhghhhWbXb(cyjYb)czjZb*cAj0b+cBj,cCj[l-cDj]l.cEj^l/cFj:cGj;cHj=cIj?cJjihjhVhWhXhkhlhmhnhohphqhrh6 sh7 YhZh! thuhvhwhxhyh{e|eNkOkPkQkRkSk[i}eTk~evkafbfUkcfwkVkxk]iWkXkdfef@c[c]c^c_c`cykzkAkDcBkEcCkDkL KjC LjMj%fybEkFkGkHk'fIkFcGcHcIczbJc(fAb)fBb*fCb+fDb,fEb-f.f/fFb:fGb;fHb0h1h2h3h4h5h6h7hM N R IfJfKfLfMfNfOfPfQfRfSfwcxcyc8hzc9h!hT P #h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_h`h{h|h}h~haibicidieifigihiiijikiliminioipiqiri^i{c|c}c~ctfufvfwfxf_i`i{i|i}i~iajsitibjcjadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!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~daebecedeeefegeheiejedjkeTfgfYkZklezh0k1kyfzf=i?iAfBfuiej2k3kme4k5kue6k7k8k9k!k#kvewexeye$k%kze'kfjgjUf3chjijne(kAeBeB CeDeffCf9b!bjjkjljmjAcBcCcNj)k*kOj+kPj,kQj-kRj.kSj/kTj:kUj;kVj=kWj?kXj@kYj[kZj]k0j^k1j_k2j`k3j{k4j|k5j}k6j~k7jal8jbl9jcl!jdl#jel$jfl%joe'jgl(jhl)jil*jjl+jkl,jll-jml.jnl/jol:jpl;jql=jrl?jsl@jtl[jul]jvl^jwl_jxl`jyl{jzl|jAl}jBl~jClakDlbkpeckElFlGldkHlekIlfkJlgkKlhkLlikMljkNlkkFelb$bFfqereseviwixiyiziAiBiCiDiEiFiGiHiIiJiKiLiMiNiOiPiQiRiSiTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i%b

635 elif isinstance(arg, GraphBuilder): 2mbifx D E jfy kf$ lfv wbz % Lcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J NcOcPcQcRcSc' ( ) * + , - . / TcUcVcWcXcYcK vbnfofpfqfrfEew 6 7 ! P hbVflb_l

636 stream = <Stream>arg.stream 2mbifx D E jfy kf$ lfv wbz % Lcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J NcOcPcQcRcSc' ( ) * + , - . / TcUcVcWcXcYcK vbnfofpfqfrfEew 6 7 ! Vflb

637 Stream_check_open(stream) 2mbifx D E jfy kf$ lfv wbz % Lcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J NcOcPcQcRcSc' ( ) * + , - . / TcUcVcWcXcYcK vbnfofpfqfrfEew 6 7 ! lb

638 return stream 2mbifx D E jfy kf$ lfv wbz % Lcxbmf9 a b c d e f g h i j k l m n o p F q r s t u G H I J NcOcPcQcRcSc' ( ) * + , - . / TcUcVcWcXcYcK vbnfofpfqfrfEew 6 7 ! lb

639 elif allow_stream_protocol and hasattr(arg, "__cuda_stream__"): 2P hb_l

640 stream = Stream._init(arg) 2P hb

641 warnings.warn( 1P

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

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

644 "using Stream(obj) instead.", 

645 stacklevel=2, 

646 category=DeprecationWarning, 1P

647 ) 

648 return stream 1P

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