Coverage for cuda/core/_stream.pyx: 82.05%
234 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
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)
17from cuda.core._utils.version cimport cy_driver_version
19import cython
20import warnings
21from dataclasses import dataclass
22from typing import Protocol, TYPE_CHECKING
24from cuda.core._context cimport (
25 Context,
26 Context_check_open,
27)
28from cuda.core._device_resources cimport DeviceResources
29from cuda.core._event import Event, EventOptions
31from cuda.core._rt cimport context_get_device
32from cuda.core._rt cimport (
33 ContextHandle,
34 EventHandle,
35 StreamHandle,
36 create_context_handle_ref,
37 create_event_handle_for_stream,
38 create_stream_handle,
39 create_stream_handle_with_owner,
40 context_get_stream_priority_range,
41 get_last_error,
42 get_legacy_stream,
43 get_per_thread_stream,
44 get_stream_context,
45 as_intptr,
46 as_cu,
47 as_py,
48)
50if TYPE_CHECKING:
51 import cuda.bindings.driver # no-cython-lint
52 from cuda.core._device import Device
53 from cuda.core.graph import GraphBuilder
55__all__ = ['LEGACY_DEFAULT_STREAM', 'PER_THREAD_DEFAULT_STREAM', 'Stream', 'StreamOptions']
58@dataclass
59cdef class StreamOptions:
60 """Customizable :obj:`~_stream.Stream` options.
62 Attributes
63 ----------
64 nonblocking : bool, optional
65 Stream does not synchronize with the NULL stream. (Default to True)
66 priority : int, optional
67 Stream priority where lower number represents a
68 higher priority. (Default to lowest priority)
70 """
72 nonblocking : cython.bint = True
73 priority: int | None = None
76class IsStreamType(Protocol):
77 def __cuda_stream__(self) -> tuple[int, int]:
78 """
79 For any Python object that is meant to be interpreted as a CUDA stream, the intent
80 can be communicated by implementing this protocol that returns a 2-tuple: The protocol
81 version number (currently ``0``) and the address of ``cudaStream_t``. Both values
82 should be Python `int`.
83 """
84 ...
87cdef class Stream:
88 """Represent a queue of GPU operations that are executed in a specific order.
90 Applications use streams to control the order of execution for
91 GPU work. Work within a single stream are executed sequentially.
92 Whereas work across multiple streams can be further controlled
93 using stream priorities and :obj:`~_event.Event` managements.
95 Advanced users can utilize default streams for enforce complex
96 implicit synchronization behaviors.
98 Directly creating a :obj:`~_stream.Stream` is not supported due to ambiguity.
99 New streams should instead be created through a :obj:`~_device.Device`
100 object, or created directly through using an existing handle
101 using Stream.from_handle().
102 """
103 def __init__(self, *args, **kwargs) -> None:
104 raise RuntimeError( 2um
105 "Stream objects cannot be instantiated directly. "
106 "Please use Device APIs (create_stream) or other Stream APIs (from_handle)."
107 )
109 @staticmethod
110 cdef Stream _from_handle(type cls, StreamHandle h_stream):
111 """Create a Stream from an existing StreamHandle (cdef-only factory)."""
112 cdef Stream s = cls.__new__(cls) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
113 s._h_stream = h_stream 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
114 s._h_context = get_stream_context(h_stream) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
115 s._device_id = -1 # lazy init'd (invalid sentinel) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
116 s._nonblocking = -1 # lazy init'd 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
117 s._priority = INT32_MIN # lazy init'd 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
118 return s 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eriecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcscsi/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bff/j}hVc:j{bWc;jIbKgJbLgahXc=jbhgf?jchMgOfhf@jNgif[jYc]j|bjf^jKbZc_j}b0c`j~hOgaiPgbiQgLb~b1c{jac2c|jbc3c}jcc4c~j5cak6cbk7cck8cdk9cek!cfk#cgk$chkdhRgehSgOiTgPiUgQiVgRiWgfhXgciYgdiZgei0gfi1ggihi2gii3g6 ji4g7 Si5gTi6g! ki7glimi8gni9goi!gpi#gkflfWlXlYlZl0l1l5jmf2lnfofpf3lqf4lrf5lsf$g6l%g6j7l8ltfuf~cadbdcdddedUiO E P # $ % ' ( ) * + 5 3b4bVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh0j5i6iphqh7i8irhsh9i!i-b.b/b:b;b=bthuhsgMb9ltg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i(g)g]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTf9j!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfueqiUfVf3j4jWfXf*g+gKj)jve*j+j^f}c,j-j.jweN vfYf^cBeS CeDewfT U xfLj1jEeZf0f+b'c(c` tkMj,gNjuk-gOjvkug.gPjwk/gQjxk:g)c{ | Rjyk;gSjzk=gTjAk?gUjBk@gVjCk[gWjDk]gXjEk^gYjFk_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf1f2flgElwbFl`f} sb`gmgpgW ]bxhyhzhAhBhSb3fTb4fxeye{gzeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
120 @classmethod
121 def _legacy_default(cls) -> Stream:
122 """Return the legacy default stream (supports subclassing)."""
123 return Stream._from_handle(cls, get_legacy_stream()) 2El
125 @classmethod
126 def _per_thread_default(cls) -> Stream:
127 """Return the per-thread default stream (supports subclassing)."""
128 return Stream._from_handle(cls, get_per_thread_stream()) 2Fl
130 @classmethod
131 def _init(cls, obj: IsStreamType | None = None, options: StreamOptions | None = None,
132 device_id: int | None = None, Context ctx: Context | None = None) -> Stream:
133 cdef StreamHandle h_stream
134 cdef cydriver.CUstream borrowed
135 cdef ContextHandle h_context
137 if obj is not None and options is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-gug.g/g:g)c{ | ;g=g?g@g[g]g^g_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf*k+kGk]lHk1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
138 raise ValueError("obj and options cannot be both specified") 2]l
139 if obj is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-gug.g/g:g)c{ | ;g=g?g@g[g]g^g_g|g}gtbzf_f[b,bqbngubvbB V ~gvgwgrbkgogAf*k+kGkHk1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
140 # Borrowed stream from foreign object
141 # C++ handle prevents owner from being GC'd until handle is released
142 # Owner is responsible for keeping the stream's context alive
143 borrowed = _handle_from_stream_protocol(obj) 2X ug|g}gtbzfqbubvbB V ~grbAf*k+kGkHkwbsb]b
144 h_stream = create_stream_handle_with_owner(borrowed, obj) 2X ug|g}gzfqbubvbB V ~grbAfwbsb
145 return Stream._from_handle(cls, h_stream) 2X ug|g}gzfqbubvbB V ~grbAfwbsb
147 if ctx is None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
148 raise RuntimeError("A CUDA context is required to create a stream")
149 Context_check_open(ctx) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
150 h_context = ctx._h_context 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
152 cdef StreamOptions opts = check_or_create_options(StreamOptions, options, "Stream options") 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
153 nonblocking = opts.nonblocking 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
154 priority = opts.priority 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
156 cdef unsigned int flags = (cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING if nonblocking 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
157 else cydriver.CUstream_flags.CU_STREAM_DEFAULT) 22j0f
158 # TODO: we might want to consider memoizing high/low per CUDA context and avoid this call
159 cdef int high, low
160 cdef cydriver.CUresult res_code
161 res_code = context_get_stream_priority_range(ctx._h_context, &high, &low) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
162 HANDLE_RETURN(res_code) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMb,ktg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
163 cdef int prio
164 if priority is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
165 prio = priority 2V 1f2f`f
166 if not (low <= prio <= high): 2V 1f2f`f
167 raise ValueError(f"{priority=} is out of range {[low, high]}") 2`f
168 else:
169 prio = high 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB vgwgrbkgogAflgwb} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
171 # C++ creates the stream and returns owning handle with context dependency.
172 # For green contexts, the C++ layer auto-dispatches to cuGreenCtxStreamCreate,
173 # a 12.5 driver API. cuGreenCtxCreate itself is 12.4. The driver alone
174 # decides availability. The gate lives here, not in C++.
175 if ctx.is_green and cy_driver_version() < (12, 5, 0): 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
176 raise RuntimeError(
177 "Green context stream creation requires CUDA driver 12.5 or newer "
178 f"(current driver: {'.'.join(map(str, cy_driver_version()))})"
179 )
180 h_stream = create_stream_handle(h_context, flags, prio) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
181 if not h_stream: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b2j@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
182 res_code = get_last_error() 22j
183 if not nonblocking and res_code == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE: 22j
184 # cuGreenCtxStreamCreate rejects CU_STREAM_DEFAULT;
185 # no need to check is_green since primary streams don't fail this way
186 raise ValueError( 22j
187 "Green context streams must be non-blocking. "
188 "Use StreamOptions(nonblocking=True) or omit the option (True is the default)."
189 )
190 else:
191 HANDLE_RETURN(res_code)
192 cdef Stream self = Stream._from_handle(cls, h_stream) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
193 self._nonblocking = int(nonblocking) 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
194 self._priority = prio 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
195 if device_id is not None: 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
196 self._device_id = device_id 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
197 return self 2}fxg8 ~fygagqgzgAgC BfCfDfBgCgVbbg_c`c{c|cDgxbEfx F ~ G FfEgFgy GfabHfGgv Wb)fHgz A D bbIg*cXbIfYbJg9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eybrgdczb)e*e{f+eecZbfc^b,e|f-egchc_bic0bjckclcmcAb.encocpcqcrcsc/ecgdgeg+c,c-cfggghgigjg.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCcCblb[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbTcEbcfdfFbM HbUcefJfKfLfMfNfAew `bffVc{bWcIbKgJbLgXcgfMgOfhfNgifYc|bjfKbZc}b0cOgPgQgLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cRgSgTgUgVgWgXgYgZg0g1g2g3g6 4g7 5g6g! 7g8g9g!g#gkflfmfnfofpfqfrfsf$g%gtfuf~cadbdcdddedO E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bsgMbtg*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y +f,f-f.f/f:f;f'g=f?f@f[f%b'b?b(b)b*b@bNbZ %c0 X (g)gObPbQbRbfdgdhdidPfQfRfSfTfjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqeresete]fyfueUfVfWfXf*g+gve^f}cweN vfYf^cBeS CeDewfT U xfEeZf0f+b'c(c` ,g-g.g/g:g)c{ | ;g=g?g@g[g]g^g_gtb_f[b,bqbngubvbB V vgwgrbkgogAf1f2flgwb`f} sb`gmgpgW ]bSb3fTb4fxeye{gzeUb
199 cpdef close(self):
200 """Destroy the stream.
202 Releases the stream handle. For owned streams, this destroys the
203 underlying CUDA stream. For borrowed streams, this releases the
204 reference and allows the Python owner to be GC'd.
206 .. warning::
207 Do not close :obj:`LEGACY_DEFAULT_STREAM` or
208 :obj:`PER_THREAD_DEFAULT_STREAM`. They are shared module-level
209 objects, so closing one invalidates it for the rest of the process.
210 """
211 self._h_stream.reset() 2BfCfDfVbWb)fA Xb9 /j:j;jvmwm=j?jxm@j[j]j^j_j`jymzmAm{j|j}j~jakbkckdkekfkgkhkBmCmDmEmFmGmHmImJmKmLmMmNm6 Om7 PmQm! RmSmTmUmVmMbtg%b'bNbObPbQbRbyf^cBeS CeDeT U Ee0f)l|g}gtbzfV AfSb3fTb4fxeyeze
213 @property
214 def is_closed(self) -> bool:
215 """Whether this stream has been closed."""
216 return self._h_stream.get() == NULL 2)l|g}gtbzf
218 def __cuda_stream__(self) -> tuple[int, int]:
219 """Return an instance of a __cuda_stream__ protocol."""
220 Stream_check_open(self) 2}fX tbzfB
221 return (0, as_intptr(self._h_stream)) 2}fX zfB
223 def __hash__(self) -> int:
224 return hash(as_intptr(self._h_stream)) 2ugWmXmYmZm?l@l0mGlqbB wgrbkgsb
226 def __eq__(self, other: object) -> bool:
227 if not isinstance(other, Stream): 2=lug^l_l?l@lGlqbngubvbB rbkgogwbsbpg
228 return NotImplemented 2=l^lpg
229 return as_intptr(self._h_stream) == as_intptr((<Stream>other)._h_stream) 2=lug_l?l@lGlqbngubvbB rbkgogwbsb
231 def __repr__(self) -> str:
232 cdef ContextHandle h_context
233 if not self._h_stream: 28 ybdczbAbBb3 CbDb4 EbFb)lCl
234 return "<Stream handle=0x0 context=0x0>" 2)l
235 Stream_get_ctx(self, &h_context) 28 ybdczbAbBb3 CbDb4 EbFbCl
236 return f"<Stream handle={as_intptr(self._h_stream):#x} context={as_intptr(h_context):#x}>" 28 ybdczbAbBb3 CbDb4 EbFbCl
238 @property
239 def handle(self) -> cuda.bindings.driver.CUstream:
240 """Return the underlying ``CUstream`` object.
242 .. caution::
244 This handle is a Python object. To get the memory address of the underlying C
245 handle, call ``int(Stream.handle)``.
246 """
247 return as_py(self._h_stream) 2}fqgxbF ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L rgdc{f^b|f_bM w sgMbNbPfQfRfSfTfyfqiUfVf3j4jWfXf}c)l=lugzfqbubvbV vgrbAfwbsbSbxeyezeUb
249 @property
250 def is_nonblocking(self) -> bool:
251 """Return True if this is a nonblocking stream, otherwise False."""
252 Stream_check_open(self) 2V 1f2flg
253 cdef unsigned int flags
254 if self._nonblocking == -1: 2V 1f2flg
255 with nogil: 1V
256 HANDLE_RETURN(cydriver.cuStreamGetFlags(as_cu(self._h_stream), &flags)) 1V
257 self._nonblocking = flags & cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING 1V
258 return bool(self._nonblocking) 2V 1f2flg
260 @property
261 def priority(self) -> int:
262 """Return the stream priority."""
263 Stream_check_open(self) 2V 1f2f`f
264 cdef int prio
265 if self._priority == INT32_MIN: 2V 1f2f`f
266 with nogil: 1V
267 HANDLE_RETURN(cydriver.cuStreamGetPriority(as_cu(self._h_stream), &prio)) 1V
268 self._priority = prio 1V
269 return self._priority 2V 1f2f`f
271 def sync(self) -> None:
272 """Synchronize the stream."""
273 Stream_check_open(self) 28 BfCfDfVb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybdczb)e*eJk{f+eriecZbfc^b,e|f-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/ecbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcef`b/j}h:j{b;jIbJbah=jbh?jch@j[j]j|b^jKbDl_j}b`j~haibiLb~b{jac|jbc}jcc~jakbkckdkekfkgkhkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflfmfnfQkofpfqfRkrfsfSkTktfufUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSlnkokTlpkqkUlrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh5i6iphqh7i8irhsh9i!ithuh1 Q 2 R (b)b*bZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRbvhwhqiKjvf^cBeS T U LjEe+b'c(ctkukvkwkxkykzkAkBkCkDkEkFktbmgW xhyhzhAhBhSbTbxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
274 with nogil: 28 BfCfDfVb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybdczb)e*eJk{f+eriecZbfc^b,e|f-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/ecbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcef`b/j}h:j{b;jIbJbah=jbh?jch@j[j]j|b^jKbDl_j}b`j~haibiLb~b{jac|jbc}jcc~jakbkckdkekfkgkhkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflfmfnfQkofpfqfRkrfsfSkTktfufUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSlnkokTlpkqkUlrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh5i6iphqh7i8irhsh9i!ithuh1 Q 2 R (b)b*bZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRbvhwhqiKjvf^cBeS T U LjEe+b'c(ctkukvkwkxkykzkAkBkCkDkEkFkmgW xhyhzhAhBhSbTbxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
275 HANDLE_RETURN(cydriver.cuStreamSynchronize(as_cu(self._h_stream))) 28 BfCfDfVb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybdczb)e*eJk{f+eriecZbfc^b,e|f-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/ecbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcef`b/j}h:j{b;jIbJbah=jbh?jch@j[j]j|b^jKbDl_j}b`j~haibiLb~b{jac|jbc}jcc~jakbkckdkekfkgkhkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflfmfnfQkofpfqfRkrfsfSkTktfufUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSlnkokTlpkqkUlrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh5i6iphqh7i8irhsh9i!ithuh1 Q 2 R (b)b*bZ #i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRbvhwhqiKjvf^cBeS T U LjEe+b'c(ctkukvkwkxkykzkAkBkCkDkEkFkmgW xhyhzhAhBhSbTbxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
277 def record(self, event: Event | None = None, options: EventOptions | None = None) -> Event:
278 """Record an event onto the stream.
280 Creates an :obj:`~_event.Event` object (or reuses the given one) by
281 recording on the stream.
283 Parameters
284 ----------
285 event : :obj:`~_event.Event`, optional
286 Optional event object to be reused for recording.
287 options : :obj:`EventOptions`, optional
288 Customizable dataclass for event creation options.
290 Returns
291 -------
292 :obj:`~_event.Event`
293 Newly created event object.
295 Note
296 ----
297 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or
298 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it
299 refers to whichever context is current, so a newly created event is
300 associated with the current context at call time.
302 """
303 # Create an Event object (or reusing the given one) by recording
304 # on the stream. Event flags such as disabling timing, nonblocking,
305 # and CU_EVENT_RECORD_EXTERNAL, can be set in EventOptions.
306 Stream_check_open(self) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | tb} W
307 cdef ContextHandle h_context
308 cdef int device_id
309 cdef cyEvent event_obj
310 if event is None: 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b*f1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | } W
311 Stream_get_ctx_device(self, &h_context, &device_id) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | } W
312 event_obj = cyEvent._init(cyEvent, device_id, h_context, options, False) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w O E P # $ % ' ( ) * + 5 3b4b1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y Z S T U ` { | } W
313 else:
314 event_obj = Event_accept(event) 25 *f
315 if event is not None and event_obj.is_ipc_enabled: 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W
316 raise TypeError( 15
317 "IPC-enabled events should not be re-recorded, instead create a "
318 "new event by supplying options."
319 )
321 cdef cydriver.CUevent e = as_cu(event_obj._h_event) 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W
322 with nogil: 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W
323 HANDLE_RETURN(cydriver.cuEventRecord(e, as_cu(self._h_stream))) 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W
324 return event_obj 1CxyvzADabcdefghijklmnopqrstuwOEP#$%'()*+51Q2,-./:;R=?@[]^_YZSTU`{|}W
326 def wait(self, event_or_stream: Event | Stream) -> None:
327 """Wait for a CUDA event or a CUDA stream.
329 Waiting for an event or a stream establishes a stream order.
331 If a :obj:`~_stream.Stream` is provided, then wait until the stream's
332 work is completed. This is done by recording a new :obj:`~_event.Event`
333 on the stream and then waiting on it.
335 Parameters
336 ----------
337 event_or_stream : :obj:`~_event.Event` | :obj:`~_stream.Stream`
338 The event or stream to wait for. Objects supporting the
339 ``__cuda_stream__`` protocol are also accepted and treated as
340 streams.
342 """
343 Stream_check_open(self) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w *fW ]b
344 cdef Stream stream
345 cdef cyEvent event
346 cdef EventHandle h_event
348 # Handle Event directly
349 if isinstance(event_or_stream, Event): 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w *fW ]b
350 event = Event_accept(event_or_stream) 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w *fW
351 with nogil: 1CxyvzADabcdefghijklmnopqrstuwW
352 # TODO: support flags other than 0?
353 HANDLE_RETURN(cydriver.cuStreamWaitEvent( 1CxyvzADabcdefghijklmnopqrstuwW
354 as_cu(self._h_stream), as_cu(event._h_event), 0))
355 return 1CxyvzADabcdefghijklmnopqrstuwW
357 # Convert to Stream if needed
358 if isinstance(event_or_stream, Stream): 2C x y v z A D a b c d e f g h i j k l m n o p q r s t u w ]b
359 stream = <Stream>event_or_stream 1CxyvzADabcdefghijklmnopqrstuw
360 Stream_check_open(stream) 1CxyvzADabcdefghijklmnopqrstuw
361 else:
362 try: 2]b
363 stream = Stream._init(obj=event_or_stream) 2]b
364 except Exception as e: 2]b
365 raise ValueError( 2]b
366 "only an Event, Stream, or object supporting __cuda_stream__ can be waited," 2]b
367 f" got {type(event_or_stream)}" 2]b
368 ) from e 2]b
370 # Wait on stream via a temporary event created in that stream's own
371 # context; an event from the current context would be rejected by
372 # cuEventRecord when the streams live on different devices.
373 with nogil: 1CxyvzDabcdefghijklmnopqrstuw
374 h_event = create_event_handle_for_stream( 1CxyvzDabcdefghijklmnopqrstuw
375 as_cu(stream._h_stream), cydriver.CUevent_flags.CU_EVENT_DISABLE_TIMING)
376 if not h_event: 1CxyvzDabcdefghijklmnopqrstuw
377 HANDLE_RETURN(get_last_error())
378 HANDLE_RETURN(cydriver.cuEventRecord(as_cu(h_event), as_cu(stream._h_stream))) 1CxyvzDabcdefghijklmnopqrstuw
379 # TODO: support flags other than 0?
380 HANDLE_RETURN(cydriver.cuStreamWaitEvent(as_cu(self._h_stream), as_cu(h_event), 0)) 1CxyvzDabcdefghijklmnopqrstuw
382 @property
383 def device(self) -> Device:
384 """Return the :obj:`~_device.Device` singleton associated with this stream.
386 Note
387 ----
388 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or
389 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it
390 refers to whichever context is current, so this returns the device for
391 the current context at call time.
393 For a created stream, the current context on the device may differ from
394 this stream's context. That case occurs when a different CUDA context is
395 set current after the stream is created.
397 """
398 Stream_check_open(self) 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB
399 from cuda.core._device import Device # avoid circular import 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB
400 cdef ContextHandle h_context
401 cdef int device_id
402 Stream_get_ctx_device(self, &h_context, &device_id) 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB
403 return Device(device_id) 2C x F ~ G y v z A D a b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeE HeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b0 6f7f8f9f!f#f$f%fN 'f(f,bB
405 @property
406 def context(self) -> Context:
407 """Return the :obj:`~_context.Context` associated with this stream.
409 Note
410 ----
411 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or
412 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it
413 refers to whichever context is current, so this returns the current
414 context at call time.
416 """
417 Stream_check_open(self) 2F ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w -b.b/b:b;b=bMb@bNbZ [bB
418 cdef ContextHandle h_context
419 cdef int device_id
420 Stream_get_ctx_device(self, &h_context, &device_id) 2F ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w -b.b/b:b;b=bMb@bNbZ [bB
421 return Context._from_handle(Context, h_context, device_id) 2F ~ G Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w -b.b/b:b;b=bMb@bNbZ [bB
423 @property
424 def resources(self) -> DeviceResources:
425 """Query the hardware resources provisioned for this stream's context.
427 For streams created from a green context, returns the resources
428 that context was provisioned with. For streams on the primary
429 context, returns the full device resources.
431 Note
432 ----
433 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or
434 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it
435 refers to whichever context is current, so this queries the current
436 context at call time.
438 """
439 Stream_check_open(self) 2%b'b?b
440 cdef ContextHandle h_context
441 cdef int device_id
442 Stream_get_ctx_device(self, &h_context, &device_id) 2%b'b?b
443 return DeviceResources._init_from_ctx(h_context, device_id) 2%b'b?b
445 @staticmethod
446 def from_handle(handle) -> Stream:
447 """Create a new :obj:`~_stream.Stream` object from a foreign stream handle.
449 Uses a cudaStream_t pointer address represented as a Python int
450 to create a new :obj:`~_stream.Stream` object.
452 Note
453 ----
454 Stream lifetime is not managed, foreign object must remain
455 alive while this stream is active.
457 Parameters
458 ----------
459 handle : int
460 Stream handle representing the address of a foreign
461 stream object.
463 Returns
464 -------
465 :obj:`~_stream.Stream`
466 Newly created stream object.
468 """
470 class _stream_holder: 2ug|g}gzfqbubvbV ~grbwbsb
471 def __cuda_stream__(self) -> tuple[int, int]: 2ug|g}gzfqbubvbV ~grbwbsb
472 return (0, handle) 2ug|g}gzfqbubvbV ~grbwbsb
474 return Stream._init(obj=_stream_holder()) 2ug|g}gzfqbubvbV ~grbwbsb
476 def create_graph_builder(self) -> GraphBuilder:
477 """Create a new :obj:`~graph.GraphBuilder` object.
479 The new graph builder will be associated with this stream.
481 Returns
482 -------
483 :obj:`~graph.GraphBuilder`
484 Newly created graph builder object.
486 """
487 Stream_check_open(self) 28 ~fagBfCfDfVbbg_c`c{c|cabWbbbXb9 cgdgeg+c,c-cfggghgigjg.c/c:ccbdbebfbgbhbibjbkb6 7 ! 0ftb
488 from cuda.core.graph._graph_builder import GraphBuilder 28 ~fagBfCfDfVbbg_c`c{c|cabWbbbXb9 cgdgeg+c,c-cfggghgigjg.c/c:ccbdbebfbgbhbibjbkb6 7 ! 0f
490 return GraphBuilder._init(self) 28 ~fagBfCfDfVbbg_c`c{c|cabWbbbXb9 cgdgeg+c,c-cfggghgigjg.c/c:ccbdbebfbgbhbibjbkb6 7 ! 0f
493LEGACY_DEFAULT_STREAM: Stream = Stream._legacy_default()
494PER_THREAD_DEFAULT_STREAM: Stream = Stream._per_thread_default()
497cpdef Stream default_stream():
498 """Return the default CUDA :obj:`~_stream.Stream`.
500 The type of default stream returned depends on if the environment
501 variable CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM is set.
503 If set, returns a per-thread default stream. Otherwise returns
504 the legacy stream.
506 """
507 # TODO: flip the default
508 cdef const char* use_ptds_raw = getenv("CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM") 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
510 cdef int use_ptds = 0 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
511 if use_ptds_raw != NULL: 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
512 use_ptds = <int>strtol(use_ptds_raw, NULL, 10) 2!l
514 # value is non-zero, including for weird stuff like 123foo
515 if use_ptds: 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
516 return PER_THREAD_DEFAULT_STREAM 2!l
517 else:
518 return LEGACY_DEFAULT_STREAM 2xbF G abbb9 a b c d e f g h i j k l m n o p H q r s t u I J K L IkJkriecZbfc^bKkLkMkgchc_bNkic0bjckclcOkPkmcncocpcqcrcscsicbtcdbebfbucgbhbibjbkb3 vcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIilbJiKiDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcSc4 1b2bmbGbnbobpbLiMiNiTcM HbUc-k.k5f`b}hVc{bWcIbJbahXcbhchYc|bKbZc}b0c~haibiLb~b1cac2cbc3ccc4c5c6c7c8c9c!c#c$cdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipi/k:k;k=k?k@k[k5j]kQk^kRk_k`kSk{kTk6j|k}k~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUi*l+l,lO E P 0kHelk1kIemkHl2k3kIlJl4k5kKlLl6k7kMlNlJeKeOlPlLeMeQlRlNeOeSl-lnkokTl.lpkqkUl/lrkskVlVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R (b)b*b#i%c$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte:lflglhlueqiiljlklll3j4jKj)jmlnlve;lolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j}c,j-j.jwezl$f%fN 'f(fLj1j+b'c(cMjNjOjPjQj)cAlBlRjSjTjUjVjWjXjYjGl!lxhyhzhAhBhTbChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
520cdef inline bint Stream_handle_is_default_token(cydriver.CUstream s) noexcept nogil:
521 """Return True for the raw CU_STREAM_LEGACY and CU_STREAM_PER_THREAD tokens.
523 These tokens carry no context of their own; they refer to whatever context
524 is current, so nothing resolved from one may be cached on the object.
525 """
526 cdef uintptr_t h = <uintptr_t>s 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbZb0bAbBb3 CblbDb4 1b2bmbnbobpbEbFbM w 5fffVcWcIbJbahXcbhgfchhfifYcjfKbZc0cLb1c2c3c4c5c6c7c8c9c!c#c$cdhehfh`lFeikGejkkkO E P # $ % ' ( ) * + 5 3b4bHelkIemkJeKeLeMeNeOenkokpkqkrksk5bgh6bhh7bih8bjh9bkhlh!bmh#bnh$boh{l8k9k!k|l}l~l#kam$kbm%k'kcm(kdm0j)kphqhrhsh-b.b/b:b;b=bthuhMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b(b)b*b@bNbZ 0 ObPbQbRbvhwh6f7f8f9f!f#f$f%fN 'f(f^cemfmgmhmS imjmkmlmCeDewfT U xfmmnmompmqm1jrm0fsmtm+b` MjNjOjPjQj)c{ | RjClSjTjUjVjWjXjYj[b,bB } W xhyhzhAhBhSbTbChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
527 return h == <uintptr_t>cydriver.CU_STREAM_LEGACY or h == <uintptr_t>cydriver.CU_STREAM_PER_THREAD 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbZb0bAbBb3 CblbDb4 1b2bmbnbobpbEbFbM w 5fffVcWcIbJbahXcbhgfchhfifYcjfKbZc0cLb1c2c3c4c5c6c7c8c9c!c#c$cdhehfh`lFeikGejkkkO E P # $ % ' ( ) * + 5 3b4bHelkIemkJeKeLeMeNeOenkokpkqkrksk5bgh6bhh7bih8bjh9bkhlh!bmh#bnh$boh{l8k9k!k|l}l~l#kam$kbm%k'kcm(kdm0j)kphqhrhsh-b.b/b:b;b=bthuhMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b(b)b*b@bNbZ 0 ObPbQbRbvhwh6f7f8f9f!f#f$f%fN 'f(f^cemfmgmhmS imjmkmlmCeDewfT U xfmmnmompmqm1jrm0fsmtm+b` MjNjOjPjQj)c{ | RjClSjTjUjVjWjXjYj[b,bB } W xhyhzhAhBhSbTbChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
530cdef inline bint Stream_is_default_token(Stream self) noexcept nogil:
531 """Return True when this stream is CU_STREAM_LEGACY or CU_STREAM_PER_THREAD."""
532 return Stream_handle_is_default_token(as_cu(self._h_stream)) 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbZb0bAbBb3 CblbDb4 1b2bmbnbobpbEbFbM w 5fffVcWcIbJbahXcbhgfchhfifYcjfKbZc0cLb1c2c3c4c5c6c7c8c9c!c#c$cdhehfhFeikGejkkkO E P # $ % ' ( ) * + 5 3b4bHelkIemkJeKeLeMeNeOenkokpkqkrksk5bgh6bhh7bih8bjh9bkhlh!bmh#bnh$boh8k9k!k#k$k%k'k(k)kphqhrhsh-b.b/b:b;b=bthuhMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b(b)b*b@bNbZ 0 ObPbQbRbvhwh6f7f8f9f!f#f$f%fN 'f(f^cS CeDeT U +b` MjNjOjPjQj)c{ | RjClSjTjUjVjWjXjYj[b,bB } W xhyhzhAhBhSbTbChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
535cdef inline bint Stream_is_legacy_default_token(Stream self) noexcept nogil:
536 """Return True only for CU_STREAM_LEGACY.
538 Unlike CU_STREAM_PER_THREAD, the legacy default stream token is rejected
539 outright (CUDA_ERROR_INVALID_VALUE) by cuMemcpyWithAttributesAsync and
540 cuMemcpyBatchAsync; CU_STREAM_PER_THREAD is a real stream to those entry
541 points and is accepted normally. Use this narrower check, not
542 Stream_is_default_token, wherever that distinction matters.
543 """
544 return <uintptr_t>as_cu(self._h_stream) == <uintptr_t>cydriver.CU_STREAM_LEGACY 2`b}h{bIbJbahbhchOf#l|bKbDl}b~haibiLb~bacbccc$l%l'ldhehfhcidieifigihiii6 ji7 kiliminioipi
547cdef inline int Stream_get_ctx(Stream self, ContextHandle* h_context) except?-1 nogil:
548 """Resolve the stream's context handle into ``h_context``."""
549 cdef cydriver.CUcontext ctx
550 cdef bint is_default = Stream_is_default_token(self) 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | Cl[b,bB } W
552 # Default-stream tokens must never reuse a sticky object field, even if
553 # something else populated ``_h_context`` (defense in depth for #2485).
554 if self._h_context and not is_default: 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | Cl[b,bB } W
555 h_context[0] = self._h_context 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w O E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 N S T U ` { | Cl[b,bB } W
556 return 0 28 C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L ybdczbAbBb3 CbDb4 EbFbM w O E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 N S T U ` { | Cl[b,bB } W
558 h_context[0] = get_stream_context(self._h_stream) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
559 if not h_context[0]: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
560 HANDLE_RETURN(cydriver.cuStreamGetCtx(as_cu(self._h_stream), &ctx)) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
561 if ctx != NULL: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
562 with gil: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
563 h_context[0] = create_context_handle_ref(ctx) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
565 if h_context[0] and not is_default: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
566 self._h_context = h_context[0]
567 return 0 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(f
570cdef inline int Stream_get_ctx_device(Stream self, ContextHandle* h_context, int* device_id) except?-1:
571 """Resolve the stream's context handle and device ID."""
572 cdef cydriver.CUdevice target_dev
573 cdef bint is_default = Stream_is_default_token(self) 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W
575 with nogil: 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W
576 Stream_get_ctx(self, h_context) 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W
577 if self._device_id >= 0 and not is_default: 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W
578 device_id[0] = self._device_id 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w O E P # $ % ' ( ) * + 5 3b4b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 N S T U ` { | [b,bB } W
579 else:
580 # Query the device with the stream's context current. The handle
581 # layer restores the caller's context, including on failure.
582 HANDLE_RETURN(context_get_device(h_context[0], &target_dev)) 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(fB
583 device_id[0] = <int>target_dev 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(fB
584 if not is_default: 25fFeGeHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b6f7f8f9f!f#f$f%fN 'f(fB
585 self._device_id = device_id[0] 1B
586 return 0 2C x F ~ G y v z A D Yba b c d e f g h i j k l m n o p H q r s t u I J K L M w 5fFeGeO E P # $ % ' ( ) * + 5 3b4bHeIeJeKeLeMeNeOe5b6b7b8b9b!b#b$b-b.b/b:b;b=bMb1 Q 2 , - . / : ; R = ? @ [ ] ^ _ Y %b'b?b@bNbZ 0 6f7f8f9f!f#f$f%fN 'f(fS T U ` { | [b,bB } W
589cdef cydriver.CUstream _handle_from_stream_protocol(obj) except*:
590 if isinstance(obj, Stream): 2X ug|g}gtbzfqbubvbB V ~grbAf*k+kGkHkwbsb]b
591 Stream_check_open(<Stream>obj) 2Af
592 return as_cu((<Stream>obj)._h_stream) 2Af
594 try: 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkHkwbsb]b
595 cuda_stream_attr = obj.__cuda_stream__ 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkHkwbsb]b
596 except AttributeError: 2]b
597 raise TypeError(f"{type(obj)} object does not have a '__cuda_stream__' attribute") from None 2]b
599 if callable(cuda_stream_attr): 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkHkwbsb
600 info = cuda_stream_attr() 2X ug|g}gtbzfqbubvbB V ~grb*k+kGkwbsb
601 else:
602 info = cuda_stream_attr 2Hk
603 warnings.warn( 2Hk
604 "Implementing __cuda_stream__ as an attribute is deprecated; it must be implemented as a method",
605 stacklevel=3,
606 category=DeprecationWarning, 2Hk
607 )
609 try: 2X ug|g}gzfqbubvbB V ~grb*k+kGkHkwbsb
610 len_info = len(info) 2X ug|g}gzfqbubvbB V ~grb*k+kGkHkwbsb
611 except TypeError as e: 2*k
612 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {type(info)}") from e 2*k
613 if len_info != 2: 2X ug|g}gzfqbubvbB V ~grb+kGkHkwbsb
614 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {len_info} elements") 2+kHk
615 if info[0] != 0: 2X ug|g}gzfqbubvbB V ~grbGkwbsb
616 raise RuntimeError( 2Gk
617 f"The first element of the sequence returned by obj.__cuda_stream__ must be 0, got {repr(info[0])}" 2Gk
618 )
619 return <cydriver.CUstream><uintptr_t>(info[1]) 2X ug|g}gzfqbubvbB V ~grbwbsb
621# Helper for API functions that accept either Stream or GraphBuilder. Performs
622# needed checks and returns the relevant stream. Rejects None so that callers
623# cannot rely on an implicit fallback to the default stream; if the default
624# stream is wanted, pass `device.default_stream` explicitly.
625cpdef Stream Stream_accept(arg, bint allow_stream_protocol=False):
626 from cuda.core.graph._graph_builder import GraphBuilder 28 Vb_c`c{c|cxbEfx F G Ffy GfabHfv Wb)fz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew -k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDewfT U xfLj1jEeZf+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzf_f[lxhyhzhAhBhSb3f(lTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
628 cdef Stream stream
629 if arg is None: 28 Vb_c`c{c|cxbEfx F G Ffy GfabHfv Wb)fz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew -k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDewfT U xfLj1jEeZf+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzf_f[lxhyhzhAhBhSb3f(lTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
630 raise TypeError( 2Yf[l
631 "stream is required and must not be None; "
632 "pass device.default_stream explicitly to use the default stream."
633 )
634 if isinstance(arg, Stream): 28 Vb_c`c{c|cxbEfx F G Ffy GfabHfv Wb)fz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefJfKfLfMfNfAew -k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDewfT U xfLj1jEeZf+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzf_fxhyhzhAhBhSb3f(lTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
635 stream = <Stream>arg 28 Vb_c`c{c|cxbF G abv Wb)fbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefAe-k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDeT U Lj1jEe+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzfxhyhzhAhBhSb3fTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
636 Stream_check_open(stream) 28 Vb_c`c{c|cxbF G abv Wb)fbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefAe-k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDeT U Lj1jEe+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFktbzfxhyhzhAhBhSb3fTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
637 return stream 28 Vb_c`c{c|cxbF G abv Wbbb*cXb9 a b c d e f g h i j k l m n o p H q r s t u I J K L PeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(eIkybzb)e*eJk+eriecZbfc^b,e-eKkLkMkgchc_bNkic0bjckclcOkPkmcAb.encocpcqcrcscsi/e+c,c-c.c/c:ccbtcdbebfbucgbhbibjbkb;c=c?c@c[c]cBb3 :e;e=e?e@evcwcxcyczcAcBcCctiuiviwixiyiziAiBiCiDiEiFiGiHiIiCblbJiKi[e]e^e_e`eDcEcFcGcHcIcJcKc{e|e}e~eafbfLcMcNcOcPcQcRcScDb4 1b2bmbGbnbobpbLiMiNiTcEbcfdfFbM HbUcefAe-k.k5f`bff/j}hVc:j{bWc;jIbJbahXc=jbhgf?jchOfhf@jif[j#lYc]j|bjf^jKbDlZc_j}b0c`j~haibiLb~b1c{jac2c|jbc3c}jcc4c~j5cak$l6cbk%l7cck'l8cdk9cek!cfk#cgk$chkdhehOiPiQiRifhcidieifigihiii6 ji7 SiTi! kiliminioipikflf/k:k;k=k?k@k[k5jmf]knfQkofpf^kqfRk_krf`ksfSk{kTk6j|k}ktfuf~cadbdcdddedUkVkWkFeikXkGejkYkZkkkUiO E P 0kHelk1kIemk2k3k4k5k6k7kJeKeLeMeNeOenkokpkqkrkskVi5bghWi6bhhXi7bihYi8bjhZi9b0i1ikhlh2i!bmh3i#bnh4i$boh8k9k!k#k$k%k'k(k0j)k5i6iphqh7i8irhsh9i!ithuh~kalblQ R Y +f,f-f.f/f:f;f=f?f@f[f(b)b*b#i%c$i%i0 'i(iX )i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjObPbQbRb7j8jfdgdhdidPfQfRfSfTfcldl9jel!j#j$jvhwh%j'jjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqerese(jte]fyfflglhlueqiiljlklllUfVf3j4jWfXfKj)jmlnlveolpl6fqlrlsltlulvl7f8f9f!fwlxl#fyl*j+j^f}c,j-j.jwezl$f%fN 'f(fvfYf^cBeS CeDeT U Lj1jEe+b'c(ctkMjNjukOjvkPjwkQjxk)cAlBlRjykSjzkTjAkUjBkVjCkWjDkXjEkYjFkzfxhyhzhAhBhSb3fTb4fxeyezeChDhEhFhGhHhIhJhKhLhMhNhZjOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=h?h@h[h]h^h_hUb`h{h|h
638 elif isinstance(arg, GraphBuilder): 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! X wfxfZftb_fSb(l
639 stream = <Stream>arg.stream 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! wfxfZf_fSb
640 Stream_check_open(stream) 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! wfxfZfSb
641 return stream 2VbxbEfx F G Ffy GfabHfv Wbz A bb*cXbIf9 a b c d e f g h i j k l m n o p H q r s t u I J K L +c,c-c.c/c:ccbdbebfbgbhbibjbkb;c=c?c@c[c]clbmbGbnbobpbM HbJfKfLfMfNfAew 6 7 ! wfxfZfSb
642 elif allow_stream_protocol and hasattr(arg, "__cuda_stream__"): 2X tb(l
643 stream = Stream._init(arg) 2X tb
644 warnings.warn( 1X
645 "Passing foreign stream objects to this function via the "
646 "stream protocol is deprecated. Convert the object explicitly "
647 "using Stream(obj) instead.",
648 stacklevel=2,
649 category=DeprecationWarning, 1X
650 )
651 return stream 1X
652 raise TypeError(f"Stream or GraphBuilder expected, got {type(arg).__name__}") 2(l