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
« 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
5from __future__ import annotations
7from libc.stdint cimport uintptr_t, INT32_MIN
8from libc.stdlib cimport strtol, getenv
10from cuda.bindings cimport cydriver
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)
18import cython
19import warnings
20from dataclasses import dataclass
21from typing import Protocol, TYPE_CHECKING
23from cuda.core._context cimport Context
24from cuda.core._device_resources cimport DeviceResources
25from cuda.core._event import Event, EventOptions
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)
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
50__all__ = ['LEGACY_DEFAULT_STREAM', 'PER_THREAD_DEFAULT_STREAM', 'Stream', 'StreamOptions']
53@dataclass
54cdef class StreamOptions:
55 """Customizable :obj:`~_stream.Stream` options.
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)
65 """
67 nonblocking : cython.bint = True
68 priority: int | None = None
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 ...
82cdef class Stream:
83 """Represent a queue of GPU operations that are executed in a specific order.
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.
90 Advanced users can utilize default streams for enforce complex
91 implicit synchronization behaviors.
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 )
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
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
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
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
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
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
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
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
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
198 cpdef close(self):
199 """Destroy the stream.
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.
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
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
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
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
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
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
237 @property
238 def handle(self) -> cuda.bindings.driver.CUstream:
239 """Return the underlying ``CUstream`` object.
241 .. caution::
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
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
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
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
276 def record(self, event: Event | None = None, options: EventOptions | None = None) -> Event:
277 """Record an event onto the stream.
279 Creates an :obj:`~_event.Event` object (or reuses the given one) by
280 recording on the stream.
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.
289 Returns
290 -------
291 :obj:`~_event.Event`
292 Newly created event object.
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.
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 )
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
325 def wait(self, event_or_stream: Event | Stream) -> None:
326 """Wait for a CUDA event or a CUDA stream.
328 Waiting for an event or a stream establishes a stream order.
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.
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.
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
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
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
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
376 @property
377 def device(self) -> Device:
378 """Return the :obj:`~_device.Device` singleton associated with this stream.
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.
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.
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
399 @property
400 def context(self) -> Context:
401 """Return the :obj:`~_context.Context` associated with this stream.
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.
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
417 @property
418 def resources(self) -> DeviceResources:
419 """Query the hardware resources provisioned for this stream's context.
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.
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.
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
439 @staticmethod
440 def from_handle(handle) -> Stream:
441 """Create a new :obj:`~_stream.Stream` object from a foreign stream handle.
443 Uses a cudaStream_t pointer address represented as a Python int
444 to create a new :obj:`~_stream.Stream` object.
446 Note
447 ----
448 Stream lifetime is not managed, foreign object must remain
449 alive while this stream is active.
451 Parameters
452 ----------
453 handle : int
454 Stream handle representing the address of a foreign
455 stream object.
457 Returns
458 -------
459 :obj:`~_stream.Stream`
460 Newly created stream object.
462 """
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
468 return Stream._init(obj=_stream_holder()) 20f9f!fFecbibjbO ~gdbkbfb
470 def create_graph_builder(self) -> GraphBuilder:
471 """Create a new :obj:`~graph.GraphBuilder` object.
473 The new graph builder will be associated with this stream.
475 Returns
476 -------
477 :obj:`~graph.GraphBuilder`
478 Newly created graph builder object.
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 !
484 return GraphBuilder._init(self) 2# ZfZc0c1c2c$ wb% xb9 NcOcPcQcRcSc' ( ) * + , - . / 6 7 !
487LEGACY_DEFAULT_STREAM: Stream = Stream._legacy_default()
488PER_THREAD_DEFAULT_STREAM: Stream = Stream._per_thread_default()
491cpdef Stream default_stream():
492 """Return the default CUDA :obj:`~_stream.Stream`.
494 The type of default stream returned depends on if the environment
495 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
497 If set, returns a per-thread default stream. Otherwise returns
498 the legacy stream.
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
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
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
514cdef inline bint Stream_is_default_token(Stream self) noexcept nogil:
515 """Return True for CU_STREAM_LEGACY and CU_STREAM_PER_THREAD.
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
524cdef inline bint Stream_is_legacy_default_token(Stream self) noexcept nogil:
525 """Return True only for CU_STREAM_LEGACY.
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
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
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
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
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
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
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
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
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
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 )
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
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
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