Coverage for cuda/core/_stream.pyx: 83.26%
227 statements
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-05 01:11 +0000
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-05 01:11 +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( 28m
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) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eXhZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(bYh~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`fPk-h:cQkoc;cRkpc/gqc:g.h=cSk/h{fTk:h;g|f}fUk=g~fVk?cWkrcagXksc@cYktc[cZk;h?g=h@g?h[gucvc]c0kwc^c1kxc_c2kyc`c3k{c4k|c5k}c6k~c7kad8kbd9kcd!kdd#k@h]g[h^g]h_g^h`g_h{g`h|g{h}g|h~g}hah~hbhaichbicidhdieh8 eifh9 fighgihh! hiihiijijhkikhlilhmimhsftfwmxmymzmAmBmikufCmvfwfxfDmyfEmzfFmAfnhGmohjkHmImBfCfedfdgdhdidjdniQ F R { | } ~ abbbcbdb; zcAcoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGikkHiIiJiKiLiMiNiOiPiQi6c7c8c9c!c#cRiSi5 3glkMbTiJm4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 UiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'iqhrh(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6fokpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEfBeWh7f8fgkhk9f!fshthyjvkuhCevhwhxhyhzhAhBhChDhwkxkog/cykzkAkDeO Df#fXeYeV $f%f'fW X (fzjBkZe)fpgPcQcRcrb$kCkEhDk%kFhEk'k5gGhFk(kHhGk)kIhEesbtbHk*k+kJhIk,kKhJk-kLhKk.kMhLk/kNhMk:kOhNk;kPhOk=kQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGf*f+fWgem_ fmrgub@ RhXg0g2 JbAjBjCjDjEjFjGjVb,fWb-fGeHeShIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXb8gckdkek
113 s._h_stream = h_stream 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eXhZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(bYh~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`fPk-h:cQkoc;cRkpc/gqc:g.h=cSk/h{fTk:h;g|f}fUk=g~fVk?cWkrcagXksc@cYktc[cZk;h?g=h@g?h[gucvc]c0kwc^c1kxc_c2kyc`c3k{c4k|c5k}c6k~c7kad8kbd9kcd!kdd#k@h]g[h^g]h_g^h`g_h{g`h|g{h}g|h~g}hah~hbhaichbicidhdieh8 eifh9 fighgihh! hiihiijijhkikhlilhmimhsftfwmxmymzmAmBmikufCmvfwfxfDmyfEmzfFmAfnhGmohjkHmImBfCfedfdgdhdidjdniQ F R { | } ~ abbbcbdb; zcAcoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGikkHiIiJiKiLiMiNiOiPiQi6c7c8c9c!c#cRiSi5 3glkMbTiJm4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 UiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'iqhrh(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6fokpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEfBeWh7f8fgkhk9f!fshthyjvkuhCevhwhxhyhzhAhBhChDhwkxkog/cykzkAkDeO Df#fXeYeV $f%f'fW X (fzjBkZe)fpgPcQcRcrb$kCkEhDk%kFhEk'k5gGhFk(kHhGk)kIhEesbtbHk*k+kJhIk,kKhJk-kLhKk.kMhLk/kNhMk:kOhNk;kPhOk=kQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGf*f+fWgem_ fmrgub@ RhXg0g2 JbAjBjCjDjEjFjGjVb,fWb-fGeHeShIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXb8gckdkek
114 s._h_context = get_stream_context(h_stream) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eXhZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(bYh~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`fPk-h:cQkoc;cRkpc/gqc:g.h=cSk/h{fTk:h;g|f}fUk=g~fVk?cWkrcagXksc@cYktc[cZk;h?g=h@g?h[gucvc]c0kwc^c1kxc_c2kyc`c3k{c4k|c5k}c6k~c7kad8kbd9kcd!kdd#k@h]g[h^g]h_g^h`g_h{g`h|g{h}g|h~g}hah~hbhaichbicidhdieh8 eifh9 fighgihh! hiihiijijhkikhlilhmimhsftfwmxmymzmAmBmikufCmvfwfxfDmyfEmzfFmAfnhGmohjkHmImBfCfedfdgdhdidjdniQ F R { | } ~ abbbcbdb; zcAcoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGikkHiIiJiKiLiMiNiOiPiQi6c7c8c9c!c#cRiSi5 3glkMbTiJm4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 UiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'iqhrh(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6fokpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEfBeWh7f8fgkhk9f!fshthyjvkuhCevhwhxhyhzhAhBhChDhwkxkog/cykzkAkDeO Df#fXeYeV $f%f'fW X (fzjBkZe)fpgPcQcRcrb$kCkEhDk%kFhEk'k5gGhFk(kHhGk)kIhEesbtbHk*k+kJhIk,kKhJk-kLhKk.kMhLk/kNhMk:kOhNk;kPhOk=kQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGf*f+fWgem_ fmrgub@ RhXg0g2 JbAjBjCjDjEjFjGjVb,fWb-fGeHeShIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXb8gckdkek
115 s._device_id = -1 # lazy init'd (invalid sentinel) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eXhZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(bYh~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`fPk-h:cQkoc;cRkpc/gqc:g.h=cSk/h{fTk:h;g|f}fUk=g~fVk?cWkrcagXksc@cYktc[cZk;h?g=h@g?h[gucvc]c0kwc^c1kxc_c2kyc`c3k{c4k|c5k}c6k~c7kad8kbd9kcd!kdd#k@h]g[h^g]h_g^h`g_h{g`h|g{h}g|h~g}hah~hbhaichbicidhdieh8 eifh9 fighgihh! hiihiijijhkikhlilhmimhsftfwmxmymzmAmBmikufCmvfwfxfDmyfEmzfFmAfnhGmohjkHmImBfCfedfdgdhdidjdniQ F R { | } ~ abbbcbdb; zcAcoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGikkHiIiJiKiLiMiNiOiPiQi6c7c8c9c!c#cRiSi5 3glkMbTiJm4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 UiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'iqhrh(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6fokpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEfBeWh7f8fgkhk9f!fshthyjvkuhCevhwhxhyhzhAhBhChDhwkxkog/cykzkAkDeO Df#fXeYeV $f%f'fW X (fzjBkZe)fpgPcQcRcrb$kCkEhDk%kFhEk'k5gGhFk(kHhGk)kIhEesbtbHk*k+kJhIk,kKhJk-kLhKk.kMhLk/kNhMk:kOhNk;kPhOk=kQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGf*f+fWgem_ fmrgub@ RhXg0g2 JbAjBjCjDjEjFjGjVb,fWb-fGeHeShIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXb8gckdkek
116 s._nonblocking = -1 # lazy init'd 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eXhZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(bYh~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`fPk-h:cQkoc;cRkpc/gqc:g.h=cSk/h{fTk:h;g|f}fUk=g~fVk?cWkrcagXksc@cYktc[cZk;h?g=h@g?h[gucvc]c0kwc^c1kxc_c2kyc`c3k{c4k|c5k}c6k~c7kad8kbd9kcd!kdd#k@h]g[h^g]h_g^h`g_h{g`h|g{h}g|h~g}hah~hbhaichbicidhdieh8 eifh9 fighgihh! hiihiijijhkikhlilhmimhsftfwmxmymzmAmBmikufCmvfwfxfDmyfEmzfFmAfnhGmohjkHmImBfCfedfdgdhdidjdniQ F R { | } ~ abbbcbdb; zcAcoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGikkHiIiJiKiLiMiNiOiPiQi6c7c8c9c!c#cRiSi5 3glkMbTiJm4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 UiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'iqhrh(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6fokpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEfBeWh7f8fgkhk9f!fshthyjvkuhCevhwhxhyhzhAhBhChDhwkxkog/cykzkAkDeO Df#fXeYeV $f%f'fW X (fzjBkZe)fpgPcQcRcrb$kCkEhDk%kFhEk'k5gGhFk(kHhGk)kIhEesbtbHk*k+kJhIk,kKhJk-kLhKk.kMhLk/kNhMk:kOhNk;kPhOk=kQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGf*f+fWgem_ fmrgub@ RhXg0g2 JbAjBjCjDjEjFjGjVb,fWb-fGeHeShIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXb8gckdkek
117 s._priority = INT32_MIN # lazy init'd 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eXhZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(bYh~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`fPk-h:cQkoc;cRkpc/gqc:g.h=cSk/h{fTk:h;g|f}fUk=g~fVk?cWkrcagXksc@cYktc[cZk;h?g=h@g?h[gucvc]c0kwc^c1kxc_c2kyc`c3k{c4k|c5k}c6k~c7kad8kbd9kcd!kdd#k@h]g[h^g]h_g^h`g_h{g`h|g{h}g|h~g}hah~hbhaichbicidhdieh8 eifh9 fighgihh! hiihiijijhkikhlilhmimhsftfwmxmymzmAmBmikufCmvfwfxfDmyfEmzfFmAfnhGmohjkHmImBfCfedfdgdhdidjdniQ F R { | } ~ abbbcbdb; zcAcoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGikkHiIiJiKiLiMiNiOiPiQi6c7c8c9c!c#cRiSi5 3glkMbTiJm4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 UiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'iqhrh(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6fokpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEfBeWh7f8fgkhk9f!fshthyjvkuhCevhwhxhyhzhAhBhChDhwkxkog/cykzkAkDeO Df#fXeYeV $f%f'fW X (fzjBkZe)fpgPcQcRcrb$kCkEhDk%kFhEk'k5gGhFk(kHhGk)kIhEesbtbHk*k+kJhIk,kKhJk-kLhKk.kMhLk/kNhMk:kOhNk;kPhOk=kQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGf*f+fWgem_ fmrgub@ RhXg0g2 JbAjBjCjDjEjFjGjVb,fWb-fGeHeShIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXb8gckdkek
118 return s 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eXhZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(bYh~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`fPk-h:cQkoc;cRkpc/gqc:g.h=cSk/h{fTk:h;g|f}fUk=g~fVk?cWkrcagXksc@cYktc[cZk;h?g=h@g?h[gucvc]c0kwc^c1kxc_c2kyc`c3k{c4k|c5k}c6k~c7kad8kbd9kcd!kdd#k@h]g[h^g]h_g^h`g_h{g`h|g{h}g|h~g}hah~hbhaichbicidhdieh8 eifh9 fighgihh! hiihiijijhkikhlilhmimhsftfwmxmymzmAmBmikufCmvfwfxfDmyfEmzfFmAfnhGmohjkHmImBfCfedfdgdhdidjdniQ F R { | } ~ abbbcbdb; zcAcoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGikkHiIiJiKiLiMiNiOiPiQi6c7c8c9c!c#cRiSi5 3glkMbTiJm4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 UiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'iqhrh(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6fokpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEfBeWh7f8fgkhk9f!fshthyjvkuhCevhwhxhyhzhAhBhChDhwkxkog/cykzkAkDeO Df#fXeYeV $f%f'fW X (fzjBkZe)fpgPcQcRcrb$kCkEhDk%kFhEk'k5gGhFk(kHhGk)kIhEesbtbHk*k+kJhIk,kKhJk-kLhKk.kMhLk/kNhMk:kOhNk;kPhOk=kQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGf*f+fWgem_ fmrgub@ RhXg0g2 JbAjBjCjDjEjFjGjVb,fWb-fGeHeShIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXb8gckdkek
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()) 2em
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()) 2fm
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: 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFh5gGhHhIhEesbtbJhKhLhMhNhOhPhQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGfClDl?k5m@k*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
138 raise ValueError("obj and options cannot be both specified") 25m
139 if obj is not None: 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFh5gGhHhIhEesbtbJhKhLhMhNhOhPhQhFeThUhC [ Ffqg)cSc= Yg] ^ B T Vh6g7g? VgZgGfClDl?k@k*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
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) 21 U 5gThUhC [ Ff= ] ^ B T Vh? GfClDl?k@k_ @ Jb
144 h_stream = create_stream_handle_with_owner(borrowed, obj) 21 U 5gThUhC Ff= ] ^ B T Vh? Gf_ @
145 return Stream._from_handle(cls, h_stream) 21 U 5gThUhC Ff= ] ^ B T Vh? Gf_ @
147 if ctx is None: 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
148 raise RuntimeError("A CUDA context is required to create a stream")
149 Context_check_open(ctx) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
150 h_context = ctx._h_context 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
152 cdef StreamOptions opts = check_or_create_options(StreamOptions, options, "Stream options") 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
153 nonblocking = opts.nonblocking 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
154 priority = opts.priority 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
156 cdef unsigned int flags = (cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING if nonblocking 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
157 else cydriver.CUstream_flags.CU_STREAM_DEFAULT) 2fkpg
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) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
162 HANDLE_RETURN(res_code) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMbEl4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
163 cdef int prio
164 if priority is not None: 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
165 prio = priority 2T *f+frg
166 if not (low <= prio <= high): 2T *f+frg
167 raise ValueError(f"{priority=} is out of range {[low, high]}") 2rg
168 else:
169 prio = high 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B 6g7g? VgZgGfWg_ ub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
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): 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
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) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
181 if not h_stream: 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNcfk%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
182 res_code = get_last_error() 2fk
183 if not nonblocking and res_code == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE: 2fk
184 # cuGreenCtxStreamCreate rejects CU_STREAM_DEFAULT;
185 # no need to check is_green since primary streams don't fail this way
186 raise ValueError( 2fk
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) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
193 self._nonblocking = int(nonblocking) 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
194 self._priority = prio 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
195 if device_id is not None: 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
196 self._device_id = device_id 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
197 return self 2Jg9g*cKg!gLg1g#g$gD HfIfJf%g'gDbMg+c,c-c.c(g` Kfx G vbH Lf)g*gy Mf% Nf+gv Eb_f,gz A E ' -gTcFbOfYb.g7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e@e2gsg[e]e^etg_eZb0b1bKb`eug{e2b3bLb4b5b6b7b8b9b|e}e!b#b$b%b'b(b~eNgOgPgUcVcWcQgRgSgTgUgXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?befwbffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBbjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew nc`f:coc;cpc/gqc:g=c{f;g|f}f=g~f?crcagsc@ctc[c?g@g[gucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd]g^g_g`g{g|g}g~gahbhchdheh8 fh9 ghhh! ihjhkhlhmhsftfufvfwfxfyfzfAfnhohBfCfedfdgdhdidjdQ F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 3gMb4gbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 cgdgegfggghgigphjgkglgmgJcKc$cLcMcNc%cNb4 OcPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdldU qhrhRbSbTbUbmdndodpd2f3f4f5f6fqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeAengEfBe7f8f9f!fshthuhCevhwhxhyhzhAhBhChDhog/cDeO Df#fXeYeV $f%f'fW X (fZe)fpgPcQcRcrbEhFhGhHhIhEesbtbJhKhLhMhNhOhPhQhFe[ qg)cSc= Yg] ^ B T 6g7g? VgZgGf*f+fWg_ rgub@ RhXg0g2 JbVb,fWb-fGeHeShIeJeKeLeXb8g
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() 2HfIfJfDbEb_fA Fb7 MeNePkQkRk9m!mSkTk#mUkVkWkXkYkZk$m%m'm0k1k2k3k4k5k6k7k8k9k!k#k(m)m*m+m,m-m.m/m:m;m=m?m@m8 [m9 ]m^m! _m`m{m|m}m5 Mb4gJcKcNbPeOb'cQeUfVfWfXfRe1 SeTe(cPbUeVeYfZf0f1fWeQbkdldRbSbTbUbEfXeYeV $f%fW X ZepgRmFeThUhC [ FfT GfVb,fWb-fGeHeIeJeKeLe
213 @property
214 def is_closed(self) -> bool:
215 """Whether this stream has been closed."""
216 return self._h_stream.get() == NULL 2RmThUhC [ Ff
218 def __cuda_stream__(self) -> tuple[int, int]:
219 """Return an instance of a __cuda_stream__ protocol."""
220 Stream_check_open(self) 2Jg1 U [ FfB
221 return (0, as_intptr(self._h_stream)) 2Jg1 U FfB
223 def __hash__(self) -> int:
224 return hash(as_intptr(self._h_stream)) 25g~manbncn1m2mdngm= B 7g? Vg@
226 def __eq__(self, other: object) -> bool:
227 if not isinstance(other, Stream): 20m5g6m7m1m2mgm= Yg] ^ B ? VgZg_ @ 0g
228 return NotImplemented 20m6m0g
229 return as_intptr(self._h_stream) == as_intptr((<Stream>other)._h_stream) 20m5g7m1m2mgm= Yg] ^ B ? VgZg_ @
231 def __repr__(self) -> str:
232 cdef ContextHandle h_context
233 if not self._h_stream: 2RmKm
234 return "<Stream handle=0x0 context=0x0>" 2Rm
235 Stream_get_ctx(self, &h_context) 2Km
236 return f"<Stream handle={as_intptr(self._h_stream):#x} context={as_intptr(h_context):#x}>" 2Km
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) 2Jg1g` G vbH Yba b c d e f g h i j k l m n o p I q r s t u J K L M 2gsgtgKbugLbN w 3gMbNbkdld2f3f4f5f6fEfWh7f8fgkhk9f!f/cRm0m5gFeFf= ] ^ T 6g? Gf_ @ VbGeHeIeJeKeLeXb8g
249 @property
250 def is_nonblocking(self) -> bool:
251 """Return True if this is a nonblocking stream, otherwise False."""
252 Stream_check_open(self) 2T *f+fWg
253 cdef unsigned int flags
254 if self._nonblocking == -1: 2T *f+fWg
255 with nogil: 1T
256 HANDLE_RETURN(cydriver.cuStreamGetFlags(as_cu(self._h_stream), &flags)) 1T
257 self._nonblocking = flags & cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING 1T
258 return bool(self._nonblocking) 2T *f+fWg
260 @property
261 def priority(self) -> int:
262 """Return the stream priority."""
263 Stream_check_open(self) 2T *f+frg
264 cdef int prio
265 if self._priority == INT32_MIN: 2T *f+frg
266 with nogil: 1T
267 HANDLE_RETURN(cydriver.cuStreamGetPriority(as_cu(self._h_stream), &prio)) 1T
268 self._priority = prio 1T
269 return self._priority 2T *f+frg
271 def sync(self) -> None:
272 """Synchronize the stream."""
273 Stream_check_open(self) 2*cHfIfJfDb+c,c-c.c` G H % v Eb' TcFb7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@esg[e]e^e]ktg_eXhZb0b1bKb`eug{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~e( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrflcmcncPk-hQkocRkpcqc.hSk/hTk:hUkVkWkrcXkscdmYktcZk;h=h?hucvc0kwc1kxc2kyc3k4k5k6k7k8k9k!k#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfufvf~kwfxfyfalzfAfblclBfCfdlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmwlxltmylzlumAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiHiIiJiKiLiMiNiOiPiQiRiSi5 Ti# P $ S LcMcNc4 UiOcViWiPeOb'cQeXiYiReZi1 SeTe(cPbUeWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbwjxjWhyjDfXeYeV W X zjZePcQcRc$k%k'k(k)k*k+k,k-k.k/k:k;k=kFeC [ Xg2 AjBjCjDjEjFjGjVbWbGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
274 with nogil: 2*cHfIfJfDb+c,c-c.c` G H % v Eb' TcFb7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@esg[e]e^e]ktg_eXhZb0b1bKb`eug{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~e( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrflcmcncPk-hQkocRkpcqc.hSk/hTk:hUkVkWkrcXkscdmYktcZk;h=h?hucvc0kwc1kxc2kyc3k4k5k6k7k8k9k!k#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfufvf~kwfxfyfalzfAfblclBfCfdlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmwlxltmylzlumAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiHiIiJiKiLiMiNiOiPiQiRiSi5 Ti# P $ S LcMcNc4 UiOcViWiPeOb'cQeXiYiReZi1 SeTe(cPbUeWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbwjxjWhyjDfXeYeV W X zjZePcQcRc$k%k'k(k)k*k+k,k-k.k/k:k;k=kFeC Xg2 AjBjCjDjEjFjGjVbWbGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
275 HANDLE_RETURN(cydriver.cuStreamSynchronize(as_cu(self._h_stream))) 2*cHfIfJfDb+c,c-c.c` G H % v Eb' TcFb7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@esg[e]e^e]ktg_eXhZb0b1bKb`eug{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~e( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrflcmcncPk-hQkocRkpcqc.hSk/hTk:hUkVkWkrcXkscdmYktcZk;h=h?hucvc0kwc1kxc2kyc3k4k5k6k7k8k9k!k#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfufvf~kwfxfyfalzfAfblclBfCfdlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmwlxltmylzlumAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiHiIiJiKiLiMiNiOiPiQiRiSi5 Ti# P $ S LcMcNc4 UiOcViWiPeOb'cQeXiYiReZi1 SeTe(cPbUeWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbwjxjWhyjDfXeYeV W X zjZePcQcRc$k%k'k(k)k*k+k,k-k.k/k:k;k=kFeC Xg2 AjBjCjDjEjFjGjVbWbGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
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) 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y GbZ Hb0 Ibw Q F R { | } ~ abbbcbdb; zcAcbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtb[ ub2
307 cdef ContextHandle h_context
308 cdef int device_id
309 cdef cyEvent event_obj
310 if event is None: 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y GbZ Hb0 Ibw Q F R { | } ~ abbbcbdb; zcAcbg# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
311 Stream_get_ctx_device(self, &h_context, &device_id) 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y Z 0 w Q F R { | } ~ abbbcbdb; zcAc# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
312 event_obj = cyEvent._init(cyEvent, device_id, h_context, options, False) 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y Z 0 w Q F R { | } ~ abbbcbdb; zcAc# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
313 else:
314 event_obj = Event_accept(event) 2GbHbIb; bgP
315 if event is not None and event_obj.is_ipc_enabled: 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y GbZ Hb0 Ibw Q F R { | } ~ abbbcbdb; # P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
316 raise TypeError( 1;
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) 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y GbZ Hb0 Ibw Q F R { | } ~ abbbcbdb; # P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
322 with nogil: 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y GbZ Hb0 Ibw Q F R { | } ~ abbbcbdb; # P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
323 HANDLE_RETURN(cydriver.cuEventRecord(e, as_cu(self._h_stream))) 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y GbZ Hb0 Ibw Q F R { | } ~ abbbcbdb; # P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
324 return event_obj 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u Y GbZ Hb0 Ibw Q F R { | } ~ abbbcbdb; # P $ ebfbgbhbibjbS kblbmbnbobpbqb3 4 V W X rbsbtbub2
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) 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u w bg2 Jb
344 cdef Stream stream
345 cdef cyEvent event
346 cdef EventHandle h_event
348 # Handle Event directly
349 if isinstance(event_or_stream, Event): 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u w bg2 Jb
350 event = Event_accept(event_or_stream) 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u w bg2
351 with nogil: 1DxyvzAEabcdefghijklmnopqrstuw2
352 # TODO: support flags other than 0?
353 HANDLE_RETURN(cydriver.cuStreamWaitEvent( 1DxyvzAEabcdefghijklmnopqrstuw2
354 as_cu(self._h_stream), as_cu(event._h_event), 0))
355 return 1DxyvzAEabcdefghijklmnopqrstuw2
357 # Convert to Stream if needed
358 if isinstance(event_or_stream, Stream): 2D x y v z A E a b c d e f g h i j k l m n o p q r s t u w Jb
359 stream = <Stream>event_or_stream 1DxyvzAEabcdefghijklmnopqrstuw
360 Stream_check_open(stream) 1DxyvzAEabcdefghijklmnopqrstuw
361 else:
362 try: 2Jb
363 stream = Stream._init(obj=event_or_stream) 2Jb
364 except Exception as e: 2Jb
365 raise ValueError( 2Jb
366 "only an Event, Stream, or object supporting __cuda_stream__ can be waited," 2Jb
367 f" got {type(event_or_stream)}" 2Jb
368 ) from e 2Jb
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: 1DxyvzEabcdefghijklmnopqrstuw
374 h_event = create_event_handle_for_stream( 1DxyvzEabcdefghijklmnopqrstuw
375 as_cu(stream._h_stream), cydriver.CUevent_flags.CU_EVENT_DISABLE_TIMING)
376 if not h_event: 1DxyvzEabcdefghijklmnopqrstuw
377 HANDLE_RETURN(get_last_error())
378 HANDLE_RETURN(cydriver.cuEventRecord(as_cu(h_event), as_cu(stream._h_stream))) 1DxyvzEabcdefghijklmnopqrstuw
379 # TODO: support flags other than 0?
380 HANDLE_RETURN(cydriver.cuStreamWaitEvent(as_cu(self._h_stream), as_cu(h_event), 0)) 1DxyvzEabcdefghijklmnopqrstuw
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) 2D x G vbH y v z A E a b c d e f g h i j k l m n o p I q r s t u J K L M N w vg.f/fF :f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6 wgxgygzgAgBgCgDgEgFgGgO HgIgC ScB
399 from cuda.core._device import Device # avoid circular import 2D x G vbH y v z A E a b c d e f g h i j k l m n o p I q r s t u J K L M N w vg.f/fF :f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6 wgxgygzgAgBgCgDgEgFgGgO HgIgC ScB
400 cdef ContextHandle h_context
401 cdef int device_id
402 Stream_get_ctx_device(self, &h_context, &device_id) 2D x G vbH y v z A E a b c d e f g h i j k l m n o p I q r s t u J K L M N w vg.f/fF :f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6 wgxgygzgAgBgCgDgEgFgGgO HgIgC ScB
403 return Device(device_id) 2D x G vbH y v z A E a b c d e f g h i j k l m n o p I q r s t u J K L M N w vg.f/fF :f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6 wgxgygzgAgBgCgDgEgFgGgO HgIgC ScB
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) 2G vbH Yba b c d e f g h i j k l m n o p I q r s t u J K L M N w 6c7c8c9c!c#c5 Mb%cNb4 C )cB
418 cdef ContextHandle h_context
419 cdef int device_id
420 Stream_get_ctx_device(self, &h_context, &device_id) 2G vbH Yba b c d e f g h i j k l m n o p I q r s t u J K L M N w 6c7c8c9c!c#c5 Mb%cNb4 C )cB
421 return Context._from_handle(Context, h_context, device_id) 2G vbH Yba b c d e f g h i j k l m n o p I q r s t u J K L M N w 6c7c8c9c!c#c5 Mb%cNb4 C )cB
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) 2JcKc$c
440 cdef ContextHandle h_context
441 cdef int device_id
442 Stream_get_ctx_device(self, &h_context, &device_id) 2JcKc$c
443 return DeviceResources._init_from_ctx(h_context, device_id) 2JcKc$c
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: 25gThUhC Ff= ] ^ T Vh? _ @
471 def __cuda_stream__(self) -> tuple[int, int]: 25gThUhC Ff= ] ^ T Vh? _ @
472 return (0, handle) 25gThUhC Ff= ] ^ T Vh? _ @
474 return Stream._init(obj=_stream_holder()) 25gThUhC Ff= ] ^ T Vh? _ @
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) 2*cKgLgHfIfJfDbMg+c,c-c.c% Eb' Fb7 NgOgPgUcVcWcQgRgSgTgUgXcYcZc( ) * + , - . / : 8 9 ! 'c(cVepg[
488 from cuda.core.graph._graph_builder import GraphBuilder 2*cKgLgHfIfJfDbMg+c,c-c.c% Eb' Fb7 NgOgPgUcVcWcQgRgSgTgUgXcYcZc( ) * + , - . / : 8 9 ! 'c(cVepg
490 return GraphBuilder._init(self) 2*cKgLgHfIfJfDbMg+c,c-c.c% Eb' Fb7 NgOgPgUcVcWcQgRgSgTgUgXcYcZc( ) * + , - . / : 8 9 ! 'c(cVepg
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") 2` G H % ' 7 a b c d e f g h i j k l m n o p I q r s t u J K L M [k]kXhZb0b1bKb^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b!b#b$b%b'b(bYh( )b) * + *b, - . / : +b,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hwb(h)h@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicxbybzbAbBb*h+h,hjcN CbkclcmcFlGlvgnc-h:coc;cpcqc.h=c/h:h?crcsc@ctc[c;h=h?hucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimiHlIlJlKlLlMlNlikOl~kPlalQlRlblSlcljkTlUledfdgdhdidjddlelfl.fglhl/filjlklllniSmTmUmQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmVmwlxltmWmylzlumXmAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSilkTi4l5l6lP S LcMcNcUiOcViWiObXiYiZiPbQb0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAeYm!l#l$l%lBeWh'l(l)l*lgkhkyjvk+l,lCeZm-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxk/cykzkAkDeamFgGgO HgIgzjBkPcQcRcCkDkEkFkGkEebmcmHkIkJkKkLkMkNkOkgmLmAjBjCjDjEjFjGjWbHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
510 cdef int use_ptds = 0 2` G H % ' 7 a b c d e f g h i j k l m n o p I q r s t u J K L M [k]kXhZb0b1bKb^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b!b#b$b%b'b(bYh( )b) * + *b, - . / : +b,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hwb(h)h@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicxbybzbAbBb*h+h,hjcN CbkclcmcFlGlvgnc-h:coc;cpcqc.h=c/h:h?crcsc@ctc[c;h=h?hucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimiHlIlJlKlLlMlNlikOl~kPlalQlRlblSlcljkTlUledfdgdhdidjddlelfl.fglhl/filjlklllniSmTmUmQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmVmwlxltmWmylzlumXmAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSilkTi4l5l6lP S LcMcNcUiOcViWiObXiYiZiPbQb0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAeYm!l#l$l%lBeWh'l(l)l*lgkhkyjvk+l,lCeZm-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxk/cykzkAkDeamFgGgO HgIgzjBkPcQcRcCkDkEkFkGkEebmcmHkIkJkKkLkMkNkOkgmLmAjBjCjDjEjFjGjWbHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
511 if use_ptds_raw != NULL: 2` G H % ' 7 a b c d e f g h i j k l m n o p I q r s t u J K L M [k]kXhZb0b1bKb^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b!b#b$b%b'b(bYh( )b) * + *b, - . / : +b,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hwb(h)h@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicxbybzbAbBb*h+h,hjcN CbkclcmcFlGlvgnc-h:coc;cpcqc.h=c/h:h?crcsc@ctc[c;h=h?hucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimiHlIlJlKlLlMlNlikOl~kPlalQlRlblSlcljkTlUledfdgdhdidjddlelfl.fglhl/filjlklllniSmTmUmQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmVmwlxltmWmylzlumXmAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSilkTi4l5l6lP S LcMcNcUiOcViWiObXiYiZiPbQb0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAeYm!l#l$l%lBeWh'l(l)l*lgkhkyjvk+l,lCeZm-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxk/cykzkAkDeamFgGgO HgIgzjBkPcQcRcCkDkEkFkGkEebmcmHkIkJkKkLkMkNkOkgmLmAjBjCjDjEjFjGjWbHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
512 use_ptds = <int>strtol(use_ptds_raw, NULL, 10) 2Lm
514 # value is non-zero, including for weird stuff like 123foo
515 if use_ptds: 2` G H % ' 7 a b c d e f g h i j k l m n o p I q r s t u J K L M [k]kXhZb0b1bKb^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b!b#b$b%b'b(bYh( )b) * + *b, - . / : +b,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hwb(h)h@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicxbybzbAbBb*h+h,hjcN CbkclcmcFlGlvgnc-h:coc;cpcqc.h=c/h:h?crcsc@ctc[c;h=h?hucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimiHlIlJlKlLlMlNlikOl~kPlalQlRlblSlcljkTlUledfdgdhdidjddlelfl.fglhl/filjlklllniSmTmUmQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmVmwlxltmWmylzlumXmAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSilkTi4l5l6lP S LcMcNcUiOcViWiObXiYiZiPbQb0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAeYm!l#l$l%lBeWh'l(l)l*lgkhkyjvk+l,lCeZm-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxk/cykzkAkDeamFgGgO HgIgzjBkPcQcRcCkDkEkFkGkEebmcmHkIkJkKkLkMkNkOkgmLmAjBjCjDjEjFjGjWbHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
516 return PER_THREAD_DEFAULT_STREAM 2Lm
517 else:
518 return LEGACY_DEFAULT_STREAM 2` G H % ' 7 a b c d e f g h i j k l m n o p I q r s t u J K L M [k]kXhZb0b1bKb^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b!b#b$b%b'b(bYh( )b) * + *b, - . / : +b,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hwb(h)h@b[b]b^b_b`b{b|b}b~bacbcccdcecfcgchcicxbybzbAbBb*h+h,hjcN CbkclcmcFlGlvgnc-h:coc;cpcqc.h=c/h:h?crcsc@ctc[c;h=h?hucvc]cwc^cxc_cyc`c{c|c}c~cadbdcddd@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimiHlIlJlKlLlMlNlikOl~kPlalQlRlblSlcljkTlUledfdgdhdidjddlelfl.fglhl/filjlklllniSmTmUmQ F R ml:fnlol;fplhmqlrlimjmsltlkmlmulvlmmnm=f?fompm@f[fqmrm]f^fsmVmwlxltmWmylzlumXmAlBlvmoiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSilkTi4l5l6lP S LcMcNcUiOcViWiObXiYiZiPbQb0i1i2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAeYm!l#l$l%lBeWh'l(l)l*lgkhkyjvk+l,lCeZm-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxk/cykzkAkDeamFgGgO HgIgzjBkPcQcRcCkDkEkFkGkEebmcmHkIkJkKkLkMkNkOkgmLmAjBjCjDjEjFjGjWbHjIjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
521cdef inline int Stream_get_ctx(Stream self, ContextHandle* h_context) except?-1 nogil:
522 """Resolve the stream's context handle into ``h_context``."""
523 cdef cydriver.CUcontext ctx
524 cdef bint is_default = Stream_is_default_token(self) 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w vg.f/fQ F R { | } ~ abbbcbdb; zcAc:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 wgxgygzgAgBgCgDgEgFgGgO HgIgV W X rbsbtbKmC )cScB ub2
526 # Default-stream tokens must never reuse a sticky object field, even if
527 # something else populated ``_h_context`` (defense in depth for #2485).
528 if self._h_context and not is_default: 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w vg.f/fQ F R { | } ~ abbbcbdb; zcAc:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 wgxgygzgAgBgCgDgEgFgGgO HgIgV W X rbsbtbKmC )cScB ub2
529 h_context[0] = self._h_context 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w Q F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 O V W X rbsbtbKmC )cScB ub2
530 return 0 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w Q F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 O V W X rbsbtbKmC )cScB ub2
532 h_context[0] = get_stream_context(self._h_stream) 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
533 if not h_context[0]: 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
534 HANDLE_RETURN(cydriver.cuStreamGetCtx(as_cu(self._h_stream), &ctx)) 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
535 if ctx != NULL: 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
536 with gil: 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
537 h_context[0] = create_context_handle_ref(ctx) 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
539 if h_context[0] and not is_default: 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
540 self._h_context = h_context[0] 1C
541 return 0 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC
544cdef inline int Stream_get_ctx_device(Stream self, ContextHandle* h_context, int* device_id) except?-1:
545 """Resolve the stream's context handle and device ID."""
546 cdef cydriver.CUdevice target_dev
547 cdef bint is_default = Stream_is_default_token(self) 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w vg.f/fQ F R { | } ~ abbbcbdb; zcAc:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 wgxgygzgAgBgCgDgEgFgGgO HgIgV W X rbsbtbC )cScB ub2
549 with nogil: 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w vg.f/fQ F R { | } ~ abbbcbdb; zcAc:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 wgxgygzgAgBgCgDgEgFgGgO HgIgV W X rbsbtbC )cScB ub2
550 Stream_get_ctx(self, h_context) 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w vg.f/fQ F R { | } ~ abbbcbdb; zcAc:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 wgxgygzgAgBgCgDgEgFgGgO HgIgV W X rbsbtbC )cScB ub2
551 if self._device_id >= 0 and not is_default: 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w vg.f/fQ F R { | } ~ abbbcbdb; zcAc:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 wgxgygzgAgBgCgDgEgFgGgO HgIgV W X rbsbtbC )cScB ub2
552 device_id[0] = self._device_id 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w Q F R { | } ~ abbbcbdb; zcAc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 O V W X rbsbtbC )cScB ub2
553 else:
554 # Query the device with the stream's context current. The handle
555 # layer restores the caller's context, including on failure.
556 HANDLE_RETURN(context_get_device(h_context[0], &target_dev)) 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC B
557 device_id[0] = <int>target_dev 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC B
558 if not is_default: 2vg.f/f:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIcwgxgygzgAgBgCgDgEgFgGgO HgIgC B
559 self._device_id = device_id[0] 1CB
560 return 0 2D x G vbH y v z A E Yba b c d e f g h i j k l m n o p I q r s t u J K L M Y Z 0 N w vg.f/fQ F R { | } ~ abbbcbdb; zcAc:f;f=f?f@f[f]f^fBcCcDcEcFcGcHcIc6c7c8c9c!c#c5 Mb# P $ ebfbgbhbibjbS kblbmbnbobpbqb3 JcKc$c%cNb4 6 wgxgygzgAgBgCgDgEgFgGgO HgIgV W X rbsbtbC )cScB ub2
563cdef cydriver.CUstream _handle_from_stream_protocol(obj) except*:
564 if isinstance(obj, Stream): 21 U 5gThUhC [ Ff= ] ^ B T Vh? GfClDl?k@k_ @ Jb
565 Stream_check_open(<Stream>obj) 2Gf
566 return as_cu((<Stream>obj)._h_stream) 2Gf
568 try: 21 U 5gThUhC [ Ff= ] ^ B T Vh? ClDl?k@k_ @ Jb
569 cuda_stream_attr = obj.__cuda_stream__ 21 U 5gThUhC [ Ff= ] ^ B T Vh? ClDl?k@k_ @ Jb
570 except AttributeError: 2Jb
571 raise TypeError(f"{type(obj)} object does not have a '__cuda_stream__' attribute") from None 2Jb
573 if callable(cuda_stream_attr): 21 U 5gThUhC [ Ff= ] ^ B T Vh? ClDl?k@k_ @
574 info = cuda_stream_attr() 21 U 5gThUhC [ Ff= ] ^ B T Vh? ClDl?k_ @
575 else:
576 info = cuda_stream_attr 2@k
577 warnings.warn( 2@k
578 "Implementing __cuda_stream__ as an attribute is deprecated; it must be implemented as a method",
579 stacklevel=3,
580 category=DeprecationWarning, 2@k
581 )
583 try: 21 U 5gThUhC Ff= ] ^ B T Vh? ClDl?k@k_ @
584 len_info = len(info) 21 U 5gThUhC Ff= ] ^ B T Vh? ClDl?k@k_ @
585 except TypeError as e: 2Cl
586 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {type(info)}") from e 2Cl
587 if len_info != 2: 21 U 5gThUhC Ff= ] ^ B T Vh? Dl?k@k_ @
588 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {len_info} elements") 2Dl@k
589 if info[0] != 0: 21 U 5gThUhC Ff= ] ^ B T Vh? ?k_ @
590 raise RuntimeError( 2?k
591 f"The first element of the sequence returned by obj.__cuda_stream__ must be 0, got {repr(info[0])}" 2?k
592 )
593 return <cydriver.CUstream><uintptr_t>(info[1]) 21 U 5gThUhC Ff= ] ^ B T Vh? _ @
595# Helper for API functions that accept either Stream or GraphBuilder. Performs
596# needed checks and returns the relevant stream. Rejects None so that callers
597# cannot rely on an implicit fallback to the default stream; if the default
598# stream is wanted, pass `device.default_stream` explicitly.
599cpdef Stream Stream_accept(arg, bint allow_stream_protocol=False):
600 from cuda.core.graph._graph_builder import GraphBuilder 2*cDb+c,c-c.c` Kfx G H Lfy Mf% Nfv Eb_fz A ' TcFbOf7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@e[e]e^e]k_eXhZb0b1bKb`e{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~eUcVcWcXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew FlGlvgnc`fPk-h:cQkoc;cRkpcqc.h=cSk/h{fTk:h|f}fUk~fVkMm?cWkrcagXkscdm@cYktc[cZk;h=h?hucvc]c0kwc^c1kxc_c2kyc`c3k{c4kNm|c5kOm}c6kPm~c7kad8kbd9kcd!kdd#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfHlIlJlKlLlMlNlikufOlvf~kwfxfPlyfalQlzfRlAfblSlcljkTlUlBfCfedfdgdhdidjddlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplqlrlsltlulvl=f?f@f[f]f^fwlxlylzlAlBloiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSi5 lkTi4l5l6lP S 3 cgdgegfggghgigjgkglgmgLcMcNcUiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYf3mZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6f7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEf!l#l$l%lBeWh'l(l)l*l7f8fgkhk9f!fyjvk+l,lCe-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxkog/cykzkAkDeamFgGgO HgIgDf#fXeYeV $f%f'fW X (fzjBkZe)fPcQcRc$kCkDk%kEk'kFk(kGk)kEebmcmHk*k+kIk,kJk-kKk.kLk/kMk:kNk;kOk=kFeC [ Ffqg4mAjBjCjDjEjFjGjVb,fQmWb-fGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
602 cdef Stream stream
603 if arg is None: 2*cDb+c,c-c.c` Kfx G H Lfy Mf% Nfv Eb_fz A ' TcFbOf7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@e[e]e^e]k_eXhZb0b1bKb`e{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~eUcVcWcXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew FlGlvgnc`fPk-h:cQkoc;cRkpcqc.h=cSk/h{fTk:h|f}fUk~fVkMm?cWkrcagXkscdm@cYktc[cZk;h=h?hucvc]c0kwc^c1kxc_c2kyc`c3k{c4kNm|c5kOm}c6kPm~c7kad8kbd9kcd!kdd#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfHlIlJlKlLlMlNlikufOlvf~kwfxfPlyfalQlzfRlAfblSlcljkTlUlBfCfedfdgdhdidjddlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplqlrlsltlulvl=f?f@f[f]f^fwlxlylzlAlBloiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSi5 lkTi4l5l6lP S 3 cgdgegfggghgigjgkglgmgLcMcNcUiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYf3mZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6f7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEf!l#l$l%lBeWh'l(l)l*l7f8fgkhk9f!fyjvk+l,lCe-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxkog/cykzkAkDeamFgGgO HgIgDf#fXeYeV $f%f'fW X (fzjBkZe)fPcQcRc$kCkDk%kEk'kFk(kGk)kEebmcmHk*k+kIk,kJk-kKk.kLk/kMk:kNk;kOk=kFeC [ Ffqg4mAjBjCjDjEjFjGjVb,fQmWb-fGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
604 raise TypeError( 23m#f4m
605 "stream is required and must not be None; "
606 "pass device.default_stream explicitly to use the default stream."
607 )
608 if isinstance(arg, Stream): 2*cDb+c,c-c.c` Kfx G H Lfy Mf% Nfv Eb_fz A ' TcFbOf7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@e[e]e^e]k_eXhZb0b1bKb`e{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~eUcVcWcXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrfPfQfRflcmcSfTfOew FlGlvgnc`fPk-h:cQkoc;cRkpcqc.h=cSk/h{fTk:h|f}fUk~fVkMm?cWkrcagXkscdm@cYktc[cZk;h=h?hucvc]c0kwc^c1kxc_c2kyc`c3k{c4kNm|c5kOm}c6kPm~c7kad8kbd9kcd!kdd#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfHlIlJlKlLlMlNlikufOlvf~kwfxfPlyfalQlzfRlAfblSlcljkTlUlBfCfedfdgdhdidjddlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplqlrlsltlulvl=f?f@f[f]f^fwlxlylzlAlBloiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSi5 lkTi4l5l6lP S 3 cgdgegfggghgigjgkglgmgLcMcNcUiOcViWiPeOb'cQeUfVfWfXfXiYiReZi1 SeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6f7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEf!l#l$l%lBeWh'l(l)l*l7f8fgkhk9f!fyjvk+l,lCe-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxkog/cykzkAkDeamFgGgO HgIgDf#fXeYeV $f%f'fW X (fzjBkZe)fPcQcRc$kCkDk%kEk'kFk(kGk)kEebmcmHk*k+kIk,kJk-kKk.kLk/kMk:kNk;kOk=kFeC [ FfqgAjBjCjDjEjFjGjVb,fQmWb-fGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
609 stream = <Stream>arg 2*cDb+c,c-c.c` G H % v Eb_f' TcFb7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@e[e]e^e]k_eXhZb0b1bKb`e{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~eUcVcWcXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrflcmcOeFlGlvgnc`fPk-h:cQkoc;cRkpcqc.h=cSk/h{fTk:h|f}fUk~fVkMm?cWkrcagXkscdm@cYktc[cZk;h=h?hucvc]c0kwc^c1kxc_c2kyc`c3k{c4kNm|c5kOm}c6kPm~c7kad8kbd9kcd!kdd#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfHlIlJlKlLlMlNlikufOlvf~kwfxfPlyfalQlzfRlAfblSlcljkTlUlBfCfedfdgdhdidjddlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplqlrlsltlulvl=f?f@f[f]f^fwlxlylzlAlBloiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSi5 lkTi4l5l6lP S 3 cgdgegfggghgigjgkglgmgLcMcNcUiOcViWiPeOb'cQeUfVfWfXfXiYiReZiSeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6f7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEf!l#l$l%lBeWh'l(l)l*l7f8fgkhk9f!fyjvk+l,lCe-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxkog/cykzkAkDeamFgGgO HgIgDf#fXeYeV $f%fW X zjBkZePcQcRc$kCkDk%kEk'kFk(kGk)kEebmcmHk*k+kIk,kJk-kKk.kLk/kMk:kNk;kOk=kFeC [ FfAjBjCjDjEjFjGjVb,fWb-fGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
610 Stream_check_open(stream) 2*cDb+c,c-c.c` G H % v Eb_f' TcFb7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@e[e]e^e]k_eXhZb0b1bKb`e{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~eUcVcWcXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrflcmcOeFlGlvgnc`fPk-h:cQkoc;cRkpcqc.h=cSk/h{fTk:h|f}fUk~fVkMm?cWkrcagXkscdm@cYktc[cZk;h=h?hucvc]c0kwc^c1kxc_c2kyc`c3k{c4kNm|c5kOm}c6kPm~c7kad8kbd9kcd!kdd#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfHlIlJlKlLlMlNlikufOlvf~kwfxfPlyfalQlzfRlAfblSlcljkTlUlBfCfedfdgdhdidjddlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplqlrlsltlulvl=f?f@f[f]f^fwlxlylzlAlBloiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSi5 lkTi4l5l6lP S 3 cgdgegfggghgigjgkglgmgLcMcNcUiOcViWiPeOb'cQeUfVfWfXfXiYiReZiSeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6f7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEf!l#l$l%lBeWh'l(l)l*l7f8fgkhk9f!fyjvk+l,lCe-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxkog/cykzkAkDeamFgGgO HgIgDf#fXeYeV $f%fW X zjBkZePcQcRc$kCkDk%kEk'kFk(kGk)kEebmcmHk*k+kIk,kJk-kKk.kLk/kMk:kNk;kOk=kFeC [ FfAjBjCjDjEjFjGjVb,fWb-fGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
611 return stream 2*cDb+c,c-c.c` G H % v Eb' TcFb7 a b c d e f g h i j k l m n o p I q r s t u J K L M 0e1e2e3e4e5e6e7e8e9e!e#e$e%e'e(e)e*e+e,e-e.e/e:e;e=eMeNe?e[k@e[e]e^e]k_eXhZb0b1bKb`e{e^k_k`k2b3bLb{k4b5b6b7b8b|k}k9b|e}e!b#b$b%b'b(bYh~eUcVcWcXcYcZc( )b) * + *b, - . / : 0c1c2c3c4c5caf+bbfY Gbcfdf,b-b.b/b:b;b=b?bZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'hefwb(h)hffZ Hbgfhf@b[b]b^b_b`b{b|bifjf0 Ibkflf}b~bacbcccdcecfcmfgchcicxbybzbAbBb*h+h,hjcnfofpfqfN CbkcrflcmcOeFlGlvgnc`fPk-h:cQkoc;cRkpcqc.h=cSk/h{fTk:h|f}fUk~fVkMm?cWkrcagXkscdm@cYktc[cZk;h=h?hucvc]c0kwc^c1kxc_c2kyc`c3k{c4kNm|c5kOm}c6kPm~c7kad8kbd9kcd!kdd#k@h[h]h^h_h`h{h|h}h~haibicidi8 ei9 figi! hiiijikilimisftfHlIlJlKlLlMlNlikufOlvf~kwfxfPlyfalQlzfRlAfblSlcljkTlUlBfCfedfdgdhdidjddlelfl.fglhl/filjlklllniQ F R ml:fnlol;fplqlrlsltlulvl=f?f@f[f]f^fwlxlylzlAlBloiBcpiqiCcrisiDctiuiEcviwiFcxiyiziAiBiGcCiDiHcEiFiIcGiVlWlXlYlZl0l1l2lkk3lHiIiJiKiLiMiNiOiPiQiRiSi5 lkTi4l5l6lP S 3 cgdgegfggghgigjgkglgmgLcMcNcUiOcViWiPeOb'cQeUfVfWfXfXiYiReZiSeTe(cPbUeVeYfZf0f1fWeQb6 kdld0i1iU 2i3i4i5i6i7i8i9i!i#i$i%i'i(i)i*i+i,i-i.i/i:i;i=i?i@i[i]i^i_i`i{i|i}i~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjrjsjtjujvjRbSbTbUbmknkmdndodpd2f3f4f5f6f7l8lok9lpkqkrkwjxjsktkqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekelemeneoepeqereseteuevewexeyezeukAengEf!l#l$l%lBeWh'l(l)l*l7f8fgkhk9f!fyjvk+l,lCe-l.lwg/l:l;l=l?l@lxgygzgAg[l]lBg^l_l`lCg{l|l}l~lDgEgwkxkog/cykzkAkDeamFgGgO HgIgDf#fXeYeV $f%fW X zjBkZePcQcRc$kCkDk%kEk'kFk(kGk)kEebmcmHk*k+kIk,kJk-kKk.kLk/kMk:kNk;kOk=kFeC FfAjBjCjDjEjFjGjVb,fWb-fGeHeIeJeKeHjIjJjKjLjMjNjOjPjQjRjSjTjLeUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!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~jakbkXbckdkek
612 elif isinstance(arg, GraphBuilder): 2Db` Kfx G H Lfy Mf% Nfv Ebz A ' TcFbOf7 a b c d e f g h i j k l m n o p I q r s t u J K L M UcVcWcXcYcZc( ) * + , - . / : 0c1c2c3c4c5cwbxbybzbAbBbN CbPfQfRfSfTfOew 8 9 ! 1 U 'f(f)f[ qgVbQm
613 stream = <Stream>arg.stream 2Db` Kfx G H Lfy Mf% Nfv Ebz A ' TcFbOf7 a b c d e f g h i j k l m n o p I q r s t u J K L M UcVcWcXcYcZc( ) * + , - . / : 0c1c2c3c4c5cwbxbybzbAbBbN CbPfQfRfSfTfOew 8 9 ! 'f(f)fqgVb
614 Stream_check_open(stream) 2Db` Kfx G H Lfy Mf% Nfv Ebz A ' TcFbOf7 a b c d e f g h i j k l m n o p I q r s t u J K L M UcVcWcXcYcZc( ) * + , - . / : 0c1c2c3c4c5cwbxbybzbAbBbN CbPfQfRfSfTfOew 8 9 ! 'f(f)fVb
615 return stream 2Db` Kfx G H Lfy Mf% Nfv Ebz A ' TcFbOf7 a b c d e f g h i j k l m n o p I q r s t u J K L M UcVcWcXcYcZc( ) * + , - . / : 0c1c2c3c4c5cwbxbybzbAbBbN CbPfQfRfSfTfOew 8 9 ! 'f(f)fVb
616 elif allow_stream_protocol and hasattr(arg, "__cuda_stream__"): 21 U [ Qm
617 stream = Stream._init(arg) 11U[
618 warnings.warn( 11U
619 "Passing foreign stream objects to this function via the "
620 "stream protocol is deprecated. Convert the object explicitly "
621 "using Stream(obj) instead.",
622 stacklevel=2,
623 category=DeprecationWarning, 11U
624 )
625 return stream 11U
626 raise TypeError(f"Stream or GraphBuilder expected, got {type(arg).__name__}") 2Qm