Coverage for cuda/core/_stream.pyx: 95.36%
237 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-10 02:27 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7from libc.stdint cimport uintptr_t, INT32_MIN
8from libc.stdlib cimport strtol, getenv
10from cuda.bindings cimport cydriver
12from cuda.core._event cimport Event as cyEvent, Event_accept
13from cuda.core._utils.cuda_utils cimport (
14 check_or_create_options,
15 HANDLE_RETURN,
16)
18import cython
19import warnings
20from dataclasses import dataclass
21from typing import Protocol, TYPE_CHECKING
23from cuda.core._context cimport (
24 Context,
25 Context_check_open,
26)
27from cuda.core._device_resources cimport DeviceResources
28from cuda.core._event import Event, EventOptions
30from cuda.core._resource_handles cimport (
31 ContextHandle,
32 EventHandle,
33 StreamHandle,
34 create_context_handle_ref,
35 create_event_handle_for_stream,
36 create_stream_handle,
37 create_stream_handle_with_owner,
38 context_get_stream_priority_range,
39 get_current_context,
40 get_last_error,
41 get_legacy_stream,
42 get_per_thread_stream,
43 get_stream_context,
44 as_intptr,
45 as_cu,
46 as_py,
47)
49if TYPE_CHECKING:
50 import cuda.bindings.driver # no-cython-lint
51 from cuda.core._device import Device
52 from cuda.core.graph import GraphBuilder
54__all__ = ['LEGACY_DEFAULT_STREAM', 'PER_THREAD_DEFAULT_STREAM', 'Stream', 'StreamOptions']
57@dataclass
58cdef class StreamOptions:
59 """Customizable :obj:`~_stream.Stream` options.
61 Attributes
62 ----------
63 nonblocking : bool, optional
64 Stream does not synchronize with the NULL stream. (Default to True)
65 priority : int, optional
66 Stream priority where lower number represents a
67 higher priority. (Default to lowest priority)
69 """
71 nonblocking : cython.bint = True
72 priority: int | None = None
75class IsStreamType(Protocol):
76 def __cuda_stream__(self) -> tuple[int, int]:
77 """
78 For any Python object that is meant to be interpreted as a CUDA stream, the intent
79 can be communicated by implementing this protocol that returns a 2-tuple: The protocol
80 version number (currently ``0``) and the address of ``cudaStream_t``. Both values
81 should be Python `int`.
82 """
83 ...
86cdef class Stream:
87 """Represent a queue of GPU operations that are executed in a specific order.
89 Applications use streams to control the order of execution for
90 GPU work. Work within a single stream are executed sequentially.
91 Whereas work across multiple streams can be further controlled
92 using stream priorities and :obj:`~_event.Event` managements.
94 Advanced users can utilize default streams for enforce complex
95 implicit synchronization behaviors.
97 Directly creating a :obj:`~_stream.Stream` is not supported due to ambiguity.
98 New streams should instead be created through a :obj:`~_device.Device`
99 object, or created directly through using an existing handle
100 using Stream.from_handle().
101 """
102 def __init__(self, *args, **kwargs) -> None:
103 raise RuntimeError( 2%m
104 "Stream objects cannot be instantiated directly. "
105 "Please use Device APIs (create_stream) or other Stream APIs (from_handle)."
106 )
108 @staticmethod
109 cdef Stream _from_handle(type cls, StreamHandle h_stream):
110 """Create a Stream from an existing StreamHandle (cdef-only factory)."""
111 cdef Stream s = cls.__new__(cls) 2-c3f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4edmmb$fGcnb5e6e1f7eji/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew 5befmk@hTcnk6bUcokyb^fzb_fmhVcpknhffqkoh`fwfgfrk{fhfskWctk7bifukAbXcvk8bYcwk[h|f]h}f^h~fBb9bZcxk!b0cyk#b1czk$b2cAk3cBk4cCk5cDk6cEk7cFk8cGk9cHk!cIkphagqhbgGicgHidgIiegrhfg_hgg`hhg{hig|hjg}h~hkgailg6 bimg7 JingKiog! cipgdieiqgfirggisghitg_e`eemfmgmhmim]j{ejm|e}e~ekmafuglmvg^jmmnmbfcf@c[c]c^c_c`cJkLiL KkC LkU V W X Y Z 0 1 8 KbLbompmqmrmsmtmumvmwmMiNiOiPiQiRi%b'b(b)b*b+bshth%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBf{j|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjfleiiCfDf@j[jEfFfxgygrjdkmeekfkYf=cgkhkneB dfGf?cseikjkkklkQbDcEc~ MktjzgujNkAgvjOk'fBgwjPkCgxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kDgTj$kEg#c%kFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZgUj'k0gVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k1g*jal2g$cbl3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb+jcl;g,jdl=g-jel?g.jfl@g/jgl[g:jhl]g;jil^g=jjl_gxmjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfHfIf6f=lkb?l0febfb`g7f!fQ SbEbFbJfoepe{gqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
112 s._h_stream = h_stream 2-c3f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4edmmb$fGcnb5e6e1f7eji/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew 5befmk@hTcnk6bUcokyb^fzb_fmhVcpknhffqkoh`fwfgfrk{fhfskWctk7bifukAbXcvk8bYcwk[h|f]h}f^h~fBb9bZcxk!b0cyk#b1czk$b2cAk3cBk4cCk5cDk6cEk7cFk8cGk9cHk!cIkphagqhbgGicgHidgIiegrhfg_hgg`hhg{hig|hjg}h~hkgailg6 bimg7 JingKiog! cipgdieiqgfirggisghitg_e`eemfmgmhmim]j{ejm|e}e~ekmafuglmvg^jmmnmbfcf@c[c]c^c_c`cJkLiL KkC LkU V W X Y Z 0 1 8 KbLbompmqmrmsmtmumvmwmMiNiOiPiQiRi%b'b(b)b*b+bshth%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBf{j|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjfleiiCfDf@j[jEfFfxgygrjdkmeekfkYf=cgkhkneB dfGf?cseikjkkklkQbDcEc~ MktjzgujNkAgvjOk'fBgwjPkCgxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kDgTj$kEg#c%kFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZgUj'k0gVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k1g*jal2g$cbl3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb+jcl;g,jdl=g-jel?g.jfl@g/jgl[g:jhl]g;jil^g=jjl_gxmjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfHfIf6f=lkb?l0febfb`g7f!fQ SbEbFbJfoepe{gqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
113 s._h_context = get_stream_context(h_stream) 2-c3f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4edmmb$fGcnb5e6e1f7eji/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew 5befmk@hTcnk6bUcokyb^fzb_fmhVcpknhffqkoh`fwfgfrk{fhfskWctk7bifukAbXcvk8bYcwk[h|f]h}f^h~fBb9bZcxk!b0cyk#b1czk$b2cAk3cBk4cCk5cDk6cEk7cFk8cGk9cHk!cIkphagqhbgGicgHidgIiegrhfg_hgg`hhg{hig|hjg}h~hkgailg6 bimg7 JingKiog! cipgdieiqgfirggisghitg_e`eemfmgmhmim]j{ejm|e}e~ekmafuglmvg^jmmnmbfcf@c[c]c^c_c`cJkLiL KkC LkU V W X Y Z 0 1 8 KbLbompmqmrmsmtmumvmwmMiNiOiPiQiRi%b'b(b)b*b+bshth%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBf{j|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjfleiiCfDf@j[jEfFfxgygrjdkmeekfkYf=cgkhkneB dfGf?cseikjkkklkQbDcEc~ MktjzgujNkAgvjOk'fBgwjPkCgxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kDgTj$kEg#c%kFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZgUj'k0gVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k1g*jal2g$cbl3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb+jcl;g,jdl=g-jel?g.jfl@g/jgl[g:jhl]g;jil^g=jjl_gxmjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfHfIf6f=lkb?l0febfb`g7f!fQ SbEbFbJfoepe{gqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
114 s._device_id = -1 # lazy init'd (invalid sentinel) 2-c3f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4edmmb$fGcnb5e6e1f7eji/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew 5befmk@hTcnk6bUcokyb^fzb_fmhVcpknhffqkoh`fwfgfrk{fhfskWctk7bifukAbXcvk8bYcwk[h|f]h}f^h~fBb9bZcxk!b0cyk#b1czk$b2cAk3cBk4cCk5cDk6cEk7cFk8cGk9cHk!cIkphagqhbgGicgHidgIiegrhfg_hgg`hhg{hig|hjg}h~hkgailg6 bimg7 JingKiog! cipgdieiqgfirggisghitg_e`eemfmgmhmim]j{ejm|e}e~ekmafuglmvg^jmmnmbfcf@c[c]c^c_c`cJkLiL KkC LkU V W X Y Z 0 1 8 KbLbompmqmrmsmtmumvmwmMiNiOiPiQiRi%b'b(b)b*b+bshth%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBf{j|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjfleiiCfDf@j[jEfFfxgygrjdkmeekfkYf=cgkhkneB dfGf?cseikjkkklkQbDcEc~ MktjzgujNkAgvjOk'fBgwjPkCgxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kDgTj$kEg#c%kFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZgUj'k0gVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k1g*jal2g$cbl3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb+jcl;g,jdl=g-jel?g.jfl@g/jgl[g:jhl]g;jil^g=jjl_gxmjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfHfIf6f=lkb?l0febfb`g7f!fQ SbEbFbJfoepe{gqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
115 s._nonblocking = -1 # lazy init'd 2-c3f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4edmmb$fGcnb5e6e1f7eji/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew 5befmk@hTcnk6bUcokyb^fzb_fmhVcpknhffqkoh`fwfgfrk{fhfskWctk7bifukAbXcvk8bYcwk[h|f]h}f^h~fBb9bZcxk!b0cyk#b1czk$b2cAk3cBk4cCk5cDk6cEk7cFk8cGk9cHk!cIkphagqhbgGicgHidgIiegrhfg_hgg`hhg{hig|hjg}h~hkgailg6 bimg7 JingKiog! cipgdieiqgfirggisghitg_e`eemfmgmhmim]j{ejm|e}e~ekmafuglmvg^jmmnmbfcf@c[c]c^c_c`cJkLiL KkC LkU V W X Y Z 0 1 8 KbLbompmqmrmsmtmumvmwmMiNiOiPiQiRi%b'b(b)b*b+bshth%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBf{j|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjfleiiCfDf@j[jEfFfxgygrjdkmeekfkYf=cgkhkneB dfGf?cseikjkkklkQbDcEc~ MktjzgujNkAgvjOk'fBgwjPkCgxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kDgTj$kEg#c%kFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZgUj'k0gVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k1g*jal2g$cbl3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb+jcl;g,jdl=g-jel?g.jfl@g/jgl[g:jhl]g;jil^g=jjl_gxmjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfHfIf6f=lkb?l0febfb`g7f!fQ SbEbFbJfoepe{gqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
116 s._priority = INT32_MIN # lazy init'd 2-c3f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4edmmb$fGcnb5e6e1f7eji/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew 5befmk@hTcnk6bUcokyb^fzb_fmhVcpknhffqkoh`fwfgfrk{fhfskWctk7bifukAbXcvk8bYcwk[h|f]h}f^h~fBb9bZcxk!b0cyk#b1czk$b2cAk3cBk4cCk5cDk6cEk7cFk8cGk9cHk!cIkphagqhbgGicgHidgIiegrhfg_hgg`hhg{hig|hjg}h~hkgailg6 bimg7 JingKiog! cipgdieiqgfirggisghitg_e`eemfmgmhmim]j{ejm|e}e~ekmafuglmvg^jmmnmbfcf@c[c]c^c_c`cJkLiL KkC LkU V W X Y Z 0 1 8 KbLbompmqmrmsmtmumvmwmMiNiOiPiQiRi%b'b(b)b*b+bshth%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBf{j|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjfleiiCfDf@j[jEfFfxgygrjdkmeekfkYf=cgkhkneB dfGf?cseikjkkklkQbDcEc~ MktjzgujNkAgvjOk'fBgwjPkCgxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kDgTj$kEg#c%kFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZgUj'k0gVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k1g*jal2g$cbl3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb+jcl;g,jdl=g-jel?g.jfl@g/jgl[g:jhl]g;jil^g=jjl_gxmjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfHfIf6f=lkb?l0febfb`g7f!fQ SbEbFbJfoepe{gqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
117 return s 2-c3f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4edmmb$fGcnb5e6e1f7eji/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew 5befmk@hTcnk6bUcokyb^fzb_fmhVcpknhffqkoh`fwfgfrk{fhfskWctk7bifukAbXcvk8bYcwk[h|f]h}f^h~fBb9bZcxk!b0cyk#b1czk$b2cAk3cBk4cCk5cDk6cEk7cFk8cGk9cHk!cIkphagqhbgGicgHidgIiegrhfg_hgg`hhg{hig|hjg}h~hkgailg6 bimg7 JingKiog! cipgdieiqgfirggisghitg_e`eemfmgmhmim]j{ejm|e}e~ekmafuglmvg^jmmnmbfcf@c[c]c^c_c`cJkLiL KkC LkU V W X Y Z 0 1 8 KbLbompmqmrmsmtmumvmwmMiNiOiPiQiRi%b'b(b)b*b+bshth%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBf{j|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjfleiiCfDf@j[jEfFfxgygrjdkmeekfkYf=cgkhkneB dfGf?cseikjkkklkQbDcEc~ MktjzgujNkAgvjOk'fBgwjPkCgxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kDgTj$kEg#c%kFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZgUj'k0gVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k1g*jal2g$cbl3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb+jcl;g,jdl=g-jel?g.jfl@g/jgl[g:jhl]g;jil^g=jjl_gxmjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfHfIf6f=lkb?l0febfb`g7f!fQ SbEbFbJfoepe{gqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
119 @classmethod
120 def _legacy_default(cls) -> Stream:
121 """Return the legacy default stream (supports subclassing)."""
122 return Stream._from_handle(cls, get_legacy_stream()) 2-c=l
124 @classmethod
125 def _per_thread_default(cls) -> Stream:
126 """Return the per-thread default stream (supports subclassing)."""
127 return Stream._from_handle(cls, get_per_thread_stream()) 2-c?l
129 @classmethod
130 @cython.annotation_typing(False)
131 def _init(cls, obj: IsStreamType | None = None, options: StreamOptions | None = None,
132 device_id: int | None = None, ctx: Context | None = None) -> Stream:
133 cdef StreamHandle h_stream
134 cdef cydriver.CUstream borrowed
135 cdef ContextHandle h_context
136 cdef Context context
138 if obj is not None and options is not None: 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAg'fBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_gjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfIlJlklNmllHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
139 raise ValueError("obj and options cannot be both specified") 2Nm
140 if obj is not None: 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAg'fBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_gjhkhhbkfZf.bRbcb8fibjbA O lh(f)fdb5f9flfIlJlklllHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
141 # Borrowed stream from foreign object
142 # C++ handle prevents owner from being GC'd until handle is released
143 # Owner is responsible for keeping the stream's context alive
144 borrowed = _handle_from_stream_protocol(obj) 2P 'fjhkhhbkfcbibjbA O lhdblfIlJlklllkbfbSb
145 h_stream = create_stream_handle_with_owner(borrowed, obj) 2P 'fjhkhkfcbibjbA O lhdblfkbfb
146 return Stream._from_handle(cls, h_stream) 2P 'fjhkhkfcbibjbA O lhdblfkbfb
148 if ctx is None: 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
149 raise RuntimeError("A CUDA context is required to create a stream")
150 context = <Context>ctx 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
151 Context_check_open(context) 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
152 h_context = context._h_context 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
154 cdef StreamOptions opts = check_or_create_options(StreamOptions, options, "Stream options") 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
155 nonblocking = opts.nonblocking 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
156 priority = opts.priority 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
158 cdef unsigned int flags = (cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING if nonblocking 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
159 else cydriver.CUstream_flags.CU_STREAM_DEFAULT) 2?j
160 # TODO: we might want to consider memoizing high/low per CUDA context and avoid this call
161 cdef int high, low
162 cdef cydriver.CUresult res_code
163 res_code = context_get_stream_priority_range(context._h_context, &high, &low) 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
164 HANDLE_RETURN(res_code) 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
165 cdef int prio
166 if priority is not None: 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
167 prio = priority 2O HfIf0f
168 if not (low <= prio <= high): 2O HfIf0f
169 raise ValueError(f"{priority=} is out of range {[low, high]}") 20f
170 else:
171 prio = high 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA (f)fdb5f9flf6fkbebfb`g7f!fQ SbEbFbJfoepe{gqeGb
173 # C++ creates the stream and returns owning handle with context dependency.
174 # For green contexts, the C++ layer auto-dispatches to cuGreenCtxStreamCreate.
175 h_stream = create_stream_handle(h_context, flags, prio) 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
176 if not h_stream: 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb?j-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
177 res_code = get_last_error() 2?j
178 if not nonblocking and res_code == cydriver.CUresult.CUDA_ERROR_INVALID_VALUE: 2?j
179 # cuGreenCtxStreamCreate rejects CU_STREAM_DEFAULT;
180 # no need to check is_green since primary streams don't fail this way
181 raise ValueError( 2?j
182 "Green context streams must be non-blocking. "
183 "Use StreamOptions(nonblocking=True) or omit the option (True is the default)."
184 )
185 elif res_code == cydriver.CUresult.CUDA_ERROR_NOT_SUPPORTED:
186 raise RuntimeError(
187 "cuGreenCtxStreamCreate is not available. "
188 "Green context stream creation requires CUDA 12.5 or newer."
189 )
190 else:
191 HANDLE_RETURN(res_code)
192 cdef Stream self = Stream._from_handle(cls, h_stream) 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
193 self._nonblocking = int(nonblocking) 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
194 self._priority = prio 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
195 if device_id is not None: 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
196 self._device_id = device_id 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
197 return self 23f*f# +f#f,f-f.f/fvb4f.c/c:c;c:flbmfx D gbE nf;f=fy of$ pf?fv wbKf@fz % [fFcxbqfHb]f9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emb$fGcnb5e6e1f7e/b:b3b8e2f9e;b=b4b?b@b[b]b^bob!e_b`b{b|b}b~b#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcqb*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbAcsb[e]etbK ubBc^erfsftfufvfrew 5befTc6bUcyb^fzb_fVcff`fwfgf{fhfWc7bifAbXc8bYc|f}f~fBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cagbgcgdgegfggghgigjgkglg6 mg7 ngog! pgqgrgsgtg_e`e{e|e}e~eafugvgbfcf@c[c]c^c_c`cL C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+b%fCbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R MfNfOfPfQfRfSfwgTfUfVfWfMb,bNbObPb-bDbS CcT P {c|c}c~cxfyfzfAfBfadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejekeXfjfleCfDfEfFfxgygmeYf=cneB dfGf?cseQbDcEc~ zgAgBgCgDgEg#cFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g$c3g4g5g6g7g8g9g!g#g$g%g'g(g)g*g+g,g-g.g/g:gabbb;g=g?g@g[g]g^g_ghbZf.bRbcb8fibjbA O (f)fdb5f9flfHfIf6fkb0febfb`g7f!fQ SbEbFbJfoepe{gqeGb
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() 2vbwbKfxb9 mknkok'm(mpkqk)mrksktkukvkwk*m+m,mxkykzkAkBkCkDkEkFkGkHkIk-m.m/m:m;m=m?m@m[m]m^m_m6 `m7 {m|m! }m~manbncnCbMbDbjf?cseEmjhkhhbkfO lfEbFbJfoepeqe
213 @property
214 def is_closed(self) -> bool:
215 """Whether this stream has been closed."""
216 return self._h_stream.get() == NULL 2Emjhkhhbkf
218 def __cuda_stream__(self) -> tuple[int, int]:
219 """Return an instance of a __cuda_stream__ protocol."""
220 Stream_check_open(self) 23fP hbkfA
221 return (0, as_intptr(self._h_stream)) 23fP kfA
223 def __hash__(self) -> int:
224 return hash(as_intptr(self._h_stream)) 2'fdnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnKmLmFn@lcbA )fdb5ffb
226 def __eq__(self, other: object) -> bool:
227 if not isinstance(other, Stream): 2Jm'fOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$mKmLm@lcb8fibjbA db5f9fkbfb!f
228 return NotImplemented 2JmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m!f
229 return as_intptr(self._h_stream) == as_intptr((<Stream>other)._h_stream) 2Jm'f$mKmLm@lcb8fibjbA db5f9fkbfb
231 def __repr__(self) -> str:
232 cdef ContextHandle h_context
233 if not self._h_stream: 2# mbGcnbobpb4 qbrb5 sbtbL C U V W X Y Z 0 1 |gTb}gUb~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bEm;l
234 return "<Stream handle=0x0 context=0x0>" 2Em
235 Stream_get_ctx(self, &h_context) 2# mbGcnbobpb4 qbrb5 sbtbL C U V W X Y Z 0 1 |gTb}gUb~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2b;l
236 return f"<Stream handle={as_intptr(self._h_stream):#x} context={as_intptr(h_context):#x}>" 2# mbGcnbobpb4 qbrb5 sbtbL C U V W X Y Z 0 1 |gTb}gUb~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2b;l
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) 23f#flbD gbE Hba b c d e f g h i j k l m n o p F q r s t u G H I J $fGc1f3b2f4bK w %fCbDbxfyfzfAfBfjfiiCfDf@j[jEfFf=cEmJm'fkfcbibjbO (fdblfkbfbEboepeqeGb
249 @property
250 def is_nonblocking(self) -> bool:
251 """Return True if this is a nonblocking stream, otherwise False."""
252 Stream_check_open(self) 2O HfIf6f
253 cdef unsigned int flags
254 if self._nonblocking == -1: 2O HfIf6f
255 with nogil: 1O
256 HANDLE_RETURN(cydriver.cuStreamGetFlags(as_cu(self._h_stream), &flags)) 1O
257 self._nonblocking = flags & cydriver.CUstream_flags.CU_STREAM_NON_BLOCKING 1O
258 return bool(self._nonblocking) 2O HfIf6f
260 @property
261 def priority(self) -> int:
262 """Return the stream priority."""
263 Stream_check_open(self) 2O HfIf0f
264 cdef int prio
265 if self._priority == INT32_MIN: 2O HfIf0f
266 with nogil: 1O
267 HANDLE_RETURN(cydriver.cuStreamGetPriority(as_cu(self._h_stream), &prio)) 1O
268 self._priority = prio 1O
269 return self._priority 2O HfIf0f
271 def sync(self) -> None:
272 """Synchronize the stream."""
273 Stream_check_open(self) 2# vb.c/c:c;clbD E $ v wb% Fcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbGcnb5e6enl1f7eji/b:b3b8e2f9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#e' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^e5bmk@hnk6bokybzbmhpknhqkohrksktk7bukAb:lvk8bwk[h]h^hBb9bxk!byk#bzk$bAkBkCkDkEkFkGkHkIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`e{e|eul}e~eafvlwlbfcfxlylzlJk%cAl'cBlClLiKkLk|gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishth2 M 3 N NbObPbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjuhvhiirjdf?cseQbDcEcMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlhb7fQ EbFboepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
274 with nogil: 2# vb.c/c:c;clbD E $ v wb% Fcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbGcnb5e6enl1f7eji/b:b3b8e2f9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#e' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^e5bmk@hnk6bokybzbmhpknhqkohrksktk7bukAb:lvk8bwk[h]h^hBb9bxk!byk#bzk$bAkBkCkDkEkFkGkHkIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`e{e|eul}e~eafvlwlbfcfxlylzlJk%cAl'cBlClLiKkLk|gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishth2 M 3 N NbObPbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjuhvhiirjdf?cseQbDcEcMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljl7fQ EbFboepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
275 HANDLE_RETURN(cydriver.cuStreamSynchronize(as_cu(self._h_stream))) 2# vb.c/c:c;clbD E $ v wb% Fcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbGcnb5e6enl1f7eji/b:b3b8e2f9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#e' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^e5bmk@hnk6bokybzbmhpknhqkohrksktk7bukAb:lvk8bwk[h]h^hBb9bxk!byk#bzk$bAkBkCkDkEkFkGkHkIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`e{e|eul}e~eafvlwlbfcfxlylzlJk%cAl'cBlClLiKkLk|gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishth2 M 3 N NbObPbS SiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqjuhvhiirjdf?cseQbDcEcMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljl7fQ EbFboepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
277 def record(self, event: Event | None = None, options: EventOptions | None = None) -> Event:
278 """Record an event onto the stream.
280 Creates an :obj:`~_event.Event` object (or reuses the given one) by
281 recording on the stream.
283 Parameters
284 ----------
285 event : :obj:`~_event.Event`, optional
286 Optional event object to be reused for recording.
287 options : :obj:`EventOptions`, optional
288 Customizable dataclass for event creation options.
290 Returns
291 -------
292 :obj:`~_event.Event`
293 Newly created event object.
295 Note
296 ----
297 A default stream (:obj:`LEGACY_DEFAULT_STREAM` or
298 :obj:`PER_THREAD_DEFAULT_STREAM`) carries no context of its own; it
299 refers to whichever context is current, so a newly created event is
300 associated with the current context at call time.
302 """
303 # Create an Event object (or reusing the given one) by recording
304 # on the stream. Event flags such as disabling timing, nonblocking,
305 # and CU_EVENT_RECORD_EXTERNAL, can be set in EventOptions.
306 Stream_check_open(self) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 KbLbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbhbebQ
307 cdef ContextHandle h_context
308 cdef int device_id
309 cdef cyEvent event_obj
310 if event is None: 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 KbLbLf2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
311 Stream_get_ctx_device(self, &h_context, &device_id) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 KbLb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
312 event_obj = cyEvent._init(cyEvent, device_id, h_context, options, False) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 KbLb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
313 else:
314 event_obj = Event_accept(event) 28 Lf
315 if event is not None and event_obj.is_ipc_enabled: 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
316 raise TypeError( 18
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) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
322 with nogil: 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
323 HANDLE_RETURN(cydriver.cuEventRecord(e, as_cu(self._h_stream))) 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
324 return event_obj 2x y v z a b c d e f g h i j k l m n o p q r s t u w L C U V W X Y Z 0 1 8 2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R S ~ abbbebQ
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) 2x y v z a b c d e f g h i j k l m n o p q r s t u w LfQ Sb
344 cdef Stream stream
345 cdef cyEvent event
346 cdef EventHandle h_event
348 # Handle Event directly
349 if isinstance(event_or_stream, Event): 2x y v z a b c d e f g h i j k l m n o p q r s t u w LfQ Sb
350 event = Event_accept(event_or_stream) 2x y v z a b c d e f g h i j k l m n o p q r s t u w LfQ
351 with nogil: 1xyvzabcdefghijklmnopqrstuwQ
352 # TODO: support flags other than 0?
353 HANDLE_RETURN(cydriver.cuStreamWaitEvent( 1xyvzabcdefghijklmnopqrstuwQ
354 as_cu(self._h_stream), as_cu(event._h_event), 0))
355 return 1xyvzabcdefghijklmnopqrstuwQ
357 # Convert to Stream if needed
358 if isinstance(event_or_stream, Stream): 2x y v z a b c d e f g h i j k l m n o p q r s t u w Sb
359 stream = <Stream>event_or_stream 1xyvzabcdefghijklmnopqrstuw
360 Stream_check_open(stream) 1xyvzabcdefghijklmnopqrstuw
361 else:
362 try: 2Sb
363 stream = Stream._init(obj=event_or_stream) 2Sb
364 except Exception as e: 2Sb
365 raise ValueError( 2Sb
366 "only an Event, Stream, or object supporting __cuda_stream__ can be waited," 2Sb
367 f" got {type(event_or_stream)}" 2Sb
368 ) from e 2Sb
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: 1xyvzabcdefghijklmnopqrstuw
374 h_event = create_event_handle_for_stream( 1xyvzabcdefghijklmnopqrstuw
375 as_cu(stream._h_stream), cydriver.CUevent_flags.CU_EVENT_DISABLE_TIMING)
376 if not h_event: 1xyvzabcdefghijklmnopqrstuw
377 HANDLE_RETURN(get_last_error())
378 HANDLE_RETURN(cydriver.cuEventRecord(as_cu(h_event), as_cu(stream._h_stream))) 1xyvzabcdefghijklmnopqrstuw
379 # TODO: support flags other than 0?
380 HANDLE_RETURN(cydriver.cuStreamWaitEvent(as_cu(self._h_stream), as_cu(h_event), 0)) 1xyvzabcdefghijklmnopqrstuw
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) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cC Tb(c)c*c+cUb,cVbWbXbYbZb0b1b2bT uevewexeyezeAeBeB CeDeRbA
399 from cuda.core._device import Device # avoid circular import 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cC Tb(c)c*c+cUb,cVbWbXbYbZb0b1b2bT uevewexeyezeAeBeB CeDeRbA
400 cdef ContextHandle h_context
401 cdef int device_id
402 Stream_get_ctx_device(self, &h_context, &device_id) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cC Tb(c)c*c+cUb,cVbWbXbYbZb0b1b2bT uevewexeyezeAeBeB CeDeRbA
403 return Device(device_id) 2x D gbE y v z a b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cC Tb(c)c*c+cUb,cVbWbXbYbZb0b1b2bT uevewexeyezeAeBeB CeDeRbA
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) 2D gbE Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w %b'b(b)b*b+bCb-bDbS .bA
418 cdef ContextHandle h_context
419 cdef int device_id
420 Stream_get_ctx_device(self, &h_context, &device_id) 2D gbE Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w %b'b(b)b*b+bCb-bDbS .bA
421 return Context._from_handle(Context, h_context, device_id) 2D gbE Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w %b'b(b)b*b+bCb-bDbS .bA
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) 2Mb,b
440 cdef ContextHandle h_context
441 cdef int device_id
442 Stream_get_ctx_device(self, &h_context, &device_id) 2Mb,b
443 return DeviceResources._init_from_ctx(h_context, device_id) 2Mb,b
445 @staticmethod
446 def from_handle(handle) -> Stream:
447 """Create a new :obj:`~_stream.Stream` object from a foreign stream handle.
449 Uses a cudaStream_t pointer address represented as a Python int
450 to create a new :obj:`~_stream.Stream` object.
452 Note
453 ----
454 Stream lifetime is not managed, foreign object must remain
455 alive while this stream is active.
457 Parameters
458 ----------
459 handle : int
460 Stream handle representing the address of a foreign
461 stream object.
463 Returns
464 -------
465 :obj:`~_stream.Stream`
466 Newly created stream object.
468 """
470 class _stream_holder: 2'fjhkhkfcbibjbO lhdbkbfb
471 def __cuda_stream__(self) -> tuple[int, int]: 2'fjhkhkfcbibjbO lhdbkbfb
472 return (0, handle) 2'fjhkhkfcbibjbO lhdbkbfb
474 return Stream._init(obj=_stream_holder()) 2'fjhkhkfcbibjbO lhdbkbfb
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# vb4f.c/c:c;c$ wb% xb9 HcIcJcKcLcMc' ( ) * + , - . / 6 7 ! hb
488 from cuda.core.graph._graph_builder import GraphBuilder 2# vb4f.c/c:c;c$ wb% xb9 HcIcJcKcLcMc' ( ) * + , - . / 6 7 !
490 return GraphBuilder._init(self) 2# vb4f.c/c:c;c$ wb% xb9 HcIcJcKcLcMc' ( ) * + , - . / 6 7 !
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") 2lbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J mlnlji/b:b3bolplql;b=b4brl?b@b[b]bsltl^b_b`b{b|b}b~bki' ac( ) * bc+ , - . / 4 ccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiBiCikclcmcncocpcqcrcsctcucvcwcxcyczc5 IbJbDiEiFiAcK ubBcKlLlte5b@hTc6bUcybzbmhVcnhohWc7bAbXc8bYc[h]h^hBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihiMlNlOlPlQlRl]jSlulTlvlUlwl^jVlWl@c[c]c^c_c`cxlylzl%cAl'cBlClLiFmGmL C |gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N NbObPbSiCcTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeHm0l1l2lleii3l4l5l6l@j[jrjdk7l8lmeIm9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfk=cgkhkne-lAeBeB CeDeikjkkklkQbDcEctjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTj#cUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j$c.l/l+j,j-j.j/j:j;j=j@lymFbwhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
510 cdef int use_ptds = 0 2lbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J mlnlji/b:b3bolplql;b=b4brl?b@b[b]bsltl^b_b`b{b|b}b~bki' ac( ) * bc+ , - . / 4 ccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiBiCikclcmcncocpcqcrcsctcucvcwcxcyczc5 IbJbDiEiFiAcK ubBcKlLlte5b@hTc6bUcybzbmhVcnhohWc7bAbXc8bYc[h]h^hBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihiMlNlOlPlQlRl]jSlulTlvlUlwl^jVlWl@c[c]c^c_c`cxlylzl%cAl'cBlClLiFmGmL C |gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N NbObPbSiCcTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeHm0l1l2lleii3l4l5l6l@j[jrjdk7l8lmeIm9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfk=cgkhkne-lAeBeB CeDeikjkkklkQbDcEctjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTj#cUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j$c.l/l+j,j-j.j/j:j;j=j@lymFbwhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
511 if use_ptds_raw != NULL: 2lbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J mlnlji/b:b3bolplql;b=b4brl?b@b[b]bsltl^b_b`b{b|b}b~bki' ac( ) * bc+ , - . / 4 ccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiBiCikclcmcncocpcqcrcsctcucvcwcxcyczc5 IbJbDiEiFiAcK ubBcKlLlte5b@hTc6bUcybzbmhVcnhohWc7bAbXc8bYc[h]h^hBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihiMlNlOlPlQlRl]jSlulTlvlUlwl^jVlWl@c[c]c^c_c`cxlylzl%cAl'cBlClLiFmGmL C |gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N NbObPbSiCcTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeHm0l1l2lleii3l4l5l6l@j[jrjdk7l8lmeIm9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfk=cgkhkne-lAeBeB CeDeikjkkklkQbDcEctjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTj#cUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j$c.l/l+j,j-j.j/j:j;j=j@lymFbwhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
512 use_ptds = strtol(use_ptds_raw, NULL, 10) 2ym
514 # value is non-zero, including for weird stuff like 123foo
515 if use_ptds: 2lbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J mlnlji/b:b3bolplql;b=b4brl?b@b[b]bsltl^b_b`b{b|b}b~bki' ac( ) * bc+ , - . / 4 ccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiBiCikclcmcncocpcqcrcsctcucvcwcxcyczc5 IbJbDiEiFiAcK ubBcKlLlte5b@hTc6bUcybzbmhVcnhohWc7bAbXc8bYc[h]h^hBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihiMlNlOlPlQlRl]jSlulTlvlUlwl^jVlWl@c[c]c^c_c`cxlylzl%cAl'cBlClLiFmGmL C |gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N NbObPbSiCcTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeHm0l1l2lleii3l4l5l6l@j[jrjdk7l8lmeIm9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfk=cgkhkne-lAeBeB CeDeikjkkklkQbDcEctjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTj#cUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j$c.l/l+j,j-j.j/j:j;j=j@lymFbwhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
516 return PER_THREAD_DEFAULT_STREAM 2ym
517 else:
518 return LEGACY_DEFAULT_STREAM 2lbD E $ % 9 a b c d e f g h i j k l m n o p F q r s t u G H I J mlnlji/b:b3bolplql;b=b4brl?b@b[b]bsltl^b_b`b{b|b}b~bki' ac( ) * bc+ , - . / 4 ccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiBiCikclcmcncocpcqcrcsctcucvcwcxcyczc5 IbJbDiEiFiAcK ubBcKlLlte5b@hTc6bUcybzbmhVcnhohWc7bAbXc8bYc[h]h^hBb9bZc!b0c#b1c$b2c3c4c5c6c7c8c9c!cphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihiMlNlOlPlQlRl]jSlulTlvlUlwl^jVlWl@c[c]c^c_c`cxlylzl%cAl'cBlClLiFmGmL C |gTb[lDlEl]l^lFlGl_l`l}gHl{l|l(c)c}l~l*c+cambmUb,ccm~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N NbObPbSiCcTiUiViWiXiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeHm0l1l2lleii3l4l5l6l@j[jrjdk7l8lmeIm9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfk=cgkhkne-lAeBeB CeDeikjkkklkQbDcEctjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTj#cUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j$c.l/l+j,j-j.j/j:j;j=j@lymFbwhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
520cdef inline bint Stream_is_default_token(Stream self) noexcept nogil:
521 """Return True for CU_STREAM_LEGACY and CU_STREAM_PER_THREAD.
523 These tokens carry no context of their own; they refer to whatever context
524 is current, so nothing resolved from one may be cached on the object.
525 """
526 cdef uintptr_t h = <uintptr_t>as_cu(self._h_stream) 2# x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J mbGcnbobpb4 qbrb5 IbJbsbtbK w teefTcUcybzbmhVcnhffohgfhfWcifAbXcYcBbZc0c1c2c3c4c5c6c7c8c9c!cphqhrh%c'cL C U V W X Y Z 0 1 8 KbLb|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2b%b'b(b)b*b+bshthCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,bNbObPb-bDbS T uhvhuevewexeyezeAeBeB CeDe?cQb~ tjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTj#cUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j$cabbb+j;l,j-j.j/j:j;j=j.bRbA ebQ EbFbwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
527 return h == <uintptr_t>cydriver.CU_STREAM_LEGACY or h == <uintptr_t>cydriver.CU_STREAM_PER_THREAD 2# x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J mbGcnbobpb4 qbrb5 IbJbsbtbK w teefTcUcybzbmhVcnhffohgfhfWcifAbXcYcBbZc0c1c2c3c4c5c6c7c8c9c!cphqhrh%c'cL C U V W X Y Z 0 1 8 KbLb|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2b%b'b(b)b*b+bshthCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,bNbObPb-bDbS T uhvhuevewexeyezeAeBeB CeDe?cQb~ tjujvjwjxjyjzjAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQjRjSjTj#cUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j$cabbb+j;l,j-j.j/j:j;j=j.bRbA ebQ EbFbwhxhyhzhAhBhChDhEhFhGhHhIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
530cdef inline bint Stream_is_legacy_default_token(Stream self) noexcept nogil:
531 """Return True only for CU_STREAM_LEGACY.
533 Unlike CU_STREAM_PER_THREAD, the legacy default stream token is rejected
534 outright (CUDA_ERROR_INVALID_VALUE) by cuMemcpyWithAttributesAsync and
535 cuMemcpyBatchAsync; CU_STREAM_PER_THREAD is a real stream to those entry
536 points and is accepted normally. Use this narrower check, not
537 Stream_is_default_token, wherever that distinction matters.
538 """
539 return <uintptr_t>as_cu(self._h_stream) == <uintptr_t>cydriver.CU_STREAM_LEGACY 25b@h6bybzbmhnhohwfzm7bAb:l8b[h]h^hBb9b!b#b$bAmBmCmphqhrh_h`h{h|h}h~hai6 bi7 cidieifigihi
542cdef inline int Stream_get_ctx(Stream self, ContextHandle* h_context) except?-1 nogil:
543 """Resolve the stream's context handle into ``h_context``."""
544 cdef cydriver.CUcontext ctx
545 cdef bint is_default = Stream_is_default_token(self) 2# x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J mbGcnbobpb4 qbrb5 sbtbK w te%c'cL C U V W X Y Z 0 1 8 KbLb|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2b%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T uevewexeyezeAeBeB CeDe~ abbb;l.bRbA ebQ
547 # Default-stream tokens must never reuse a sticky object field, even if
548 # something else populated ``_h_context`` (defense in depth for #2485).
549 if self._h_context and not is_default: 2# x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J mbGcnbobpb4 qbrb5 sbtbK w te%c'cL C U V W X Y Z 0 1 8 KbLb|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2b%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T uevewexeyezeAeBeB CeDe~ abbb;l.bRbA ebQ
550 h_context[0] = self._h_context 2# x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J mbGcnbobpb4 qbrb5 sbtbK w L C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T B ~ abbb;l.bRbA ebQ
551 return 0 2# x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J mbGcnbobpb4 qbrb5 sbtbK w L C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T B ~ abbb;l.bRbA ebQ
553 h_context[0] = get_stream_context(self._h_stream) 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
554 if not h_context[0]: 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
555 HANDLE_RETURN(cydriver.cuStreamGetCtx(as_cu(self._h_stream), &ctx)) 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
556 if ctx != NULL: 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
557 with gil: 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
558 h_context[0] = create_context_handle_ref(ctx) 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
560 if h_context[0] and not is_default: 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
561 self._h_context = h_context[0]
562 return 0 2te%c'c|gTb}g(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2buevewexeyezeAeBeB CeDe
565cdef inline int Stream_get_ctx_device(Stream self, ContextHandle* h_context, int* device_id) except?-1:
566 """Resolve the stream's context handle and device ID."""
567 cdef cydriver.CUcontext ctx
568 cdef cydriver.CUdevice target_dev
569 cdef ContextHandle current_context
570 cdef bint switch_context
571 cdef bint is_default = Stream_is_default_token(self) 2x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cL C U V W X Y Z 0 1 8 KbLbTb(c)c*c+cUb,cVbWbXbYbZb0b1b2b%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T uevewexeyezeAeBeB CeDe~ abbb.bRbA ebQ
573 with nogil: 2x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cL C U V W X Y Z 0 1 8 KbLbTb(c)c*c+cUb,cVbWbXbYbZb0b1b2b%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T uevewexeyezeAeBeB CeDe~ abbb.bRbA ebQ
574 Stream_get_ctx(self, h_context) 2x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cL C U V W X Y Z 0 1 8 KbLbTb(c)c*c+cUb,cVbWbXbYbZb0b1b2b%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T uevewexeyezeAeBeB CeDe~ abbb.bRbA ebQ
575 if self._device_id >= 0 and not is_default: 2x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cL C U V W X Y Z 0 1 8 KbLbTb(c)c*c+cUb,cVbWbXbYbZb0b1b2b%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T uevewexeyezeAeBeB CeDe~ abbb.bRbA ebQ
576 device_id[0] = self._device_id 2x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w L C U V W X Y Z 0 1 8 KbLb%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T B ~ abbb.bRbA ebQ
577 else:
578 # Get device ID from context, switching context temporarily if needed
579 current_context = get_current_context() 2te%c'cTb(c)c*c+cUb,cVbWbXbYbZb0b1b2buevewexeyezeAeBeB CeDeA
580 switch_context = (as_cu(current_context) != as_cu(h_context[0])) 2te%c'cTb(c)c*c+cUb,cVbWbXbYbZb0b1b2buevewexeyezeAeBeB CeDeA
581 if switch_context: 2te%c'cTb(c)c*c+cUb,cVbWbXbYbZb0b1b2buevewexeyezeAeBeB CeDeA
582 HANDLE_RETURN(cydriver.cuCtxPushCurrent(as_cu(h_context[0])))
583 HANDLE_RETURN(cydriver.cuCtxGetDevice(&target_dev)) 2te%c'cTb(c)c*c+cUb,cVbWbXbYbZb0b1b2buevewexeyezeAeBeB CeDeA
584 if switch_context: 2te%c'cTb(c)c*c+cUb,cVbWbXbYbZb0b1b2buevewexeyezeAeBeB CeDeA
585 HANDLE_RETURN(cydriver.cuCtxPopCurrent(&ctx))
586 device_id[0] = <int>target_dev 2te%c'cTb(c)c*c+cUb,cVbWbXbYbZb0b1b2buevewexeyezeAeBeB CeDeA
587 if not is_default: 2te%c'cTb(c)c*c+cUb,cVbWbXbYbZb0b1b2buevewexeyezeAeBeB CeDeA
588 self._device_id = device_id[0] 1A
589 return 0 2x D gbE y v z Hba b c d e f g h i j k l m n o p F q r s t u G H I J K w te%c'cL C U V W X Y Z 0 1 8 KbLbTb(c)c*c+cUb,cVbWbXbYbZb0b1b2b%b'b(b)b*b+bCb2 M 3 : ; = ? @ [ N ] ^ _ ` { | } R Mb,b-bDbS T uevewexeyezeAeBeB CeDe~ abbb.bRbA ebQ
592cdef cydriver.CUstream _handle_from_stream_protocol(obj) except*:
593 if isinstance(obj, Stream): 2P 'fjhkhhbkfcbibjbA O lhdblfIlJlklllkbfbSb
594 Stream_check_open(<Stream>obj) 2lf
595 return as_cu((<Stream>obj)._h_stream) 2lf
597 try: 2P 'fjhkhhbkfcbibjbA O lhdbIlJlklllkbfbSb
598 cuda_stream_attr = obj.__cuda_stream__ 2P 'fjhkhhbkfcbibjbA O lhdbIlJlklllkbfbSb
599 except AttributeError: 2Sb
600 raise TypeError(f"{type(obj)} object does not have a '__cuda_stream__' attribute") from None 2Sb
602 if callable(cuda_stream_attr): 2P 'fjhkhhbkfcbibjbA O lhdbIlJlklllkbfb
603 info = cuda_stream_attr() 2P 'fjhkhhbkfcbibjbA O lhdbIlJlklkbfb
604 else:
605 info = cuda_stream_attr 2ll
606 warnings.warn( 2ll
607 "Implementing __cuda_stream__ as an attribute is deprecated; it must be implemented as a method",
608 stacklevel=3,
609 category=DeprecationWarning, 2ll
610 )
612 try: 2P 'fjhkhkfcbibjbA O lhdbIlJlklllkbfb
613 len_info = len(info) 2P 'fjhkhkfcbibjbA O lhdbIlJlklllkbfb
614 except TypeError as e: 2Il
615 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {type(info)}") from e 2Il
616 if len_info != 2: 2P 'fjhkhkfcbibjbA O lhdbJlklllkbfb
617 raise RuntimeError(f"obj.__cuda_stream__ must return a sequence with 2 elements, got {len_info} elements") 2Jlll
618 if info[0] != 0: 2P 'fjhkhkfcbibjbA O lhdbklkbfb
619 raise RuntimeError( 2kl
620 f"The first element of the sequence returned by obj.__cuda_stream__ must be 0, got {repr(info[0])}" 2kl
621 )
622 return <cydriver.CUstream><uintptr_t>(info[1]) 2P 'fjhkhkfcbibjbA O lhdbkbfb
624# Helper for API functions that accept either Stream or GraphBuilder. Performs
625# needed checks and returns the relevant stream. Rejects None so that callers
626# cannot rely on an implicit fallback to the default stream; if the default
627# stream is wanted, pass `device.default_stream` explicitly.
628cpdef Stream Stream_accept(arg, bint allow_stream_protocol=False):
629 from cuda.core.graph._graph_builder import GraphBuilder 2# vb.c/c:c;clbmfx D E nfy of$ pfv wbKfz % Fcxbqf9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbnb5e6enl7eji/b:b3b8e9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew KlLlte5befmk@hTcnk6bUcokybzbmhVcpknhffqkohwfgfrkhfskzmWctk7bifukAb:lXcvk8bYcwk[h]h^hBb9bZcxk!b0cyk#b1czk$b2cAk3cBkAm4cCkBm5cDkCm6cEk7cFk8cGk9cHk!cIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`eMlNlOlPlQlRl]j{eSl|eul}e~eTlafvlUlwl^jVlWlbfcf@c[c]c^c_c`cxlylzlJk%cAl'cBlClLiL KkC Lk|gTbDlElFlGl}gHl(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N R MfNfOfPfQfRfSfTfUfVfWfNbObPbSiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBfXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjf0l1l2lleii3l4l5l6lCfDf@j[jEfFfrjdk7l8lme9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfkYf=cgkhkne-lAeBeB CeDedfGf?cseikjkkklkQbDcEcMktjujNkvjOkwjPkxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kTj$k#c%kUj'kVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k*jal$cbl.l/l+jcl,jdl-jel.jfl/jgl:jhl;jil=jjlhbkfZfMmEbDmFbJfoepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
631 cdef Stream stream
632 if arg is None: 2# vb.c/c:c;clbmfx D E nfy of$ pfv wbKfz % Fcxbqf9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbnb5e6enl7eji/b:b3b8e9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew KlLlte5befmk@hTcnk6bUcokybzbmhVcpknhffqkohwfgfrkhfskzmWctk7bifukAb:lXcvk8bYcwk[h]h^hBb9bZcxk!b0cyk#b1czk$b2cAk3cBkAm4cCkBm5cDkCm6cEk7cFk8cGk9cHk!cIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`eMlNlOlPlQlRl]j{eSl|eul}e~eTlafvlUlwl^jVlWlbfcf@c[c]c^c_c`cxlylzlJk%cAl'cBlClLiL KkC Lk|gTbDlElFlGl}gHl(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N R MfNfOfPfQfRfSfTfUfVfWfNbObPbSiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBfXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjf0l1l2lleii3l4l5l6lCfDf@j[jEfFfrjdk7l8lme9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfkYf=cgkhkne-lAeBeB CeDedfGf?cseikjkkklkQbDcEcMktjujNkvjOkwjPkxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kTj$k#c%kUj'kVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k*jal$cbl.l/l+jcl,jdl-jel.jfl/jgl:jhl;jil=jjlhbkfZfMmEbDmFbJfoepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
633 raise TypeError( 2GfMm
634 "stream is required and must not be None; "
635 "pass device.default_stream explicitly to use the default stream."
636 )
637 if isinstance(arg, Stream): 2# vb.c/c:c;clbmfx D E nfy of$ pfv wbKfz % Fcxbqf9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbnb5e6enl7eji/b:b3b8e9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^erfsftfufvfrew KlLlte5befmk@hTcnk6bUcokybzbmhVcpknhffqkohwfgfrkhfskzmWctk7bifukAb:lXcvk8bYcwk[h]h^hBb9bZcxk!b0cyk#b1czk$b2cAk3cBkAm4cCkBm5cDkCm6cEk7cFk8cGk9cHk!cIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`eMlNlOlPlQlRl]j{eSl|eul}e~eTlafvlUlwl^jVlWlbfcf@c[c]c^c_c`cxlylzlJk%cAl'cBlClLiL KkC Lk|gTbDlElFlGl}gHl(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N R MfNfOfPfQfRfSfTfUfVfWfNbObPbSiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBfXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjf0l1l2lleii3l4l5l6lCfDf@j[jEfFfrjdk7l8lme9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfkYf=cgkhkne-lAeBeB CeDedfGf?cseikjkkklkQbDcEcMktjujNkvjOkwjPkxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kTj$k#c%kUj'kVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k*jal$cbl.l/l+jcl,jdl-jel.jfl/jgl:jhl;jil=jjlhbkfZfEbDmFbJfoepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
638 stream = <Stream>arg 2# vb.c/c:c;clbD E $ v wbKf% Fcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbnb5e6enl7eji/b:b3b8e9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^ereKlLlte5befmk@hTcnk6bUcokybzbmhVcpknhffqkohwfgfrkhfskzmWctk7bifukAb:lXcvk8bYcwk[h]h^hBb9bZcxk!b0cyk#b1czk$b2cAk3cBkAm4cCkBm5cDkCm6cEk7cFk8cGk9cHk!cIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`eMlNlOlPlQlRl]j{eSl|eul}e~eTlafvlUlwl^jVlWlbfcf@c[c]c^c_c`cxlylzlJk%cAl'cBlClLiL KkC Lk|gTbDlElFlGl}gHl(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N R MfNfOfPfQfRfSfTfUfVfWfNbObPbSiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBfXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjf0l1l2lleii3l4l5l6lCfDf@j[jEfFfrjdk7l8lme9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfkYf=cgkhkne-lAeBeB CeDedfGf?cseikjkkklkQbDcEcMktjujNkvjOkwjPkxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kTj$k#c%kUj'kVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k*jal$cbl.l/l+jcl,jdl-jel.jfl/jgl:jhl;jil=jjlhbkfEbFbJfoepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
639 Stream_check_open(stream) 2# vb.c/c:c;clbD E $ v wbKf% Fcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbnb5e6enl7eji/b:b3b8e9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^ereKlLlte5befmk@hTcnk6bUcokybzbmhVcpknhffqkohwfgfrkhfskzmWctk7bifukAb:lXcvk8bYcwk[h]h^hBb9bZcxk!b0cyk#b1czk$b2cAk3cBkAm4cCkBm5cDkCm6cEk7cFk8cGk9cHk!cIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`eMlNlOlPlQlRl]j{eSl|eul}e~eTlafvlUlwl^jVlWlbfcf@c[c]c^c_c`cxlylzlJk%cAl'cBlClLiL KkC Lk|gTbDlElFlGl}gHl(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N R MfNfOfPfQfRfSfTfUfVfWfNbObPbSiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBfXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjf0l1l2lleii3l4l5l6lCfDf@j[jEfFfrjdk7l8lme9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfkYf=cgkhkne-lAeBeB CeDedfGf?cseikjkkklkQbDcEcMktjujNkvjOkwjPkxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kTj$k#c%kUj'kVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k*jal$cbl.l/l+jcl,jdl-jel.jfl/jgl:jhl;jil=jjlhbkfEbFbJfoepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
640 return stream 2# vb.c/c:c;clbD E $ v wb% Fcxb9 a b c d e f g h i j k l m n o p F q r s t u G H I J EeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4emlmbnb5e6enl7eji/b:b3b8e9eolplql;b=b4brl?b@b[b]bsltl^bob!e_b`b{b|b}b~bki#eHcIcJcKcLcMc' ac( ) * bc+ , - . / NcOcPcQcRcScpb4 $e%e'e(e)eccdcecfcgchcicjcliminioipiqirisitiuiviwixiyiziAiqbBiCi*e+e,e-e.ekclcmcncocpcqcrc/e:e;e=e?e@esctcucvcwcxcyczcrb5 IbJbDiEiFiAcsb[e]etbK ubBc^ereKlLlte5befmk@hTcnk6bUcokybzbmhVcpknhffqkohwfgfrkhfskzmWctk7bifukAb:lXcvk8bYcwk[h]h^hBb9bZcxk!b0cyk#b1czk$b2cAk3cBkAm4cCkBm5cDkCm6cEk7cFk8cGk9cHk!cIkphqhGiHiIirh_h`h{h|h}h~hai6 bi7 JiKi! cidieifigihi_e`eMlNlOlPlQlRl]j{eSl|eul}e~eTlafvlUlwl^jVlWlbfcf@c[c]c^c_c`cxlylzlJk%cAl'cBlClLiL KkC Lk|gTbDlElFlGl}gHl(c)c*c+cUb,c~gVbahWbbhXbchYbdhZbehfhgh0bhh1bih2bMiNiOiPiQiRishthM N R MfNfOfPfQfRfSfTfUfVfWfNbObPbSiCcTiUiT ViWiP XiYiZi0i1i2i3i4i5i6i7i8i9i!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~iajbjcjdjejfjgjhjijjjkjljmjnjojpjqj_j`j{c|c}c~cxfyfzfAfBfXlYl{jZl|j}j~juhvhakbkadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd0d1d2d3d4d5d6d7d8d9d!d#d$d%d'd(d)d*d+d,d-d.d/d:d;d=d?d@d[d]d^d_d`d{d|d}d~daebecedeeefegeheiejeckkeXfjf0l1l2lleii3l4l5l6lCfDf@j[jEfFfrjdk7l8lme9l!lue#l$l%l'l(l)lvewexeye*l+lze,lekfkYf=cgkhkne-lAeBeB CeDedfGf?cseikjkkklkQbDcEcMktjujNkvjOkwjPkxjQkyjRkzjSkAjTkBjUkCjVkDjWkEjXkFjYkGjZkHj0kIj1kJj2kKj3kLj4kMj5kNj6kOj7kPj8kQj9kRj!kSj#kTj$k#c%kUj'kVj(kWj)kXj*kYj+kZj,k0j-k1j.k2j/k3j:k4j;k5j=k6j?k7j@k8j[k9j]k!j^k#j_k$j`k%j{k'j|k(j}k)j~k*jal$cbl.l/l+jcl,jdl-jel.jfl/jgl:jhl;jil=jjlkfEbFbJfoepeqewhxhyhzhAhBhChDhEhFhGhHhsjIhJhKhLhMhNhOhPhQhRhShThUhVhWhXhYhZh0h1h2h3h4h5h6h7h8h9h!h#h$h%h'h(h)h*h+h,h-h.h/h:h;h=hGb?h
641 elif isinstance(arg, GraphBuilder): 2vblbmfx D E nfy of$ pfv wbz % Fcxbqf9 a b c d e f g h i j k l m n o p F q r s t u G H I J HcIcJcKcLcMc' ( ) * + , - . / NcOcPcQcRcScK ubrfsftfufvfrew 6 7 ! P hbZfEbDm
642 stream = <Stream>arg.stream 2vblbmfx D E nfy of$ pfv wbz % Fcxbqf9 a b c d e f g h i j k l m n o p F q r s t u G H I J HcIcJcKcLcMc' ( ) * + , - . / NcOcPcQcRcScK ubrfsftfufvfrew 6 7 ! ZfEb
643 Stream_check_open(stream) 2vblbmfx D E nfy of$ pfv wbz % Fcxbqf9 a b c d e f g h i j k l m n o p F q r s t u G H I J HcIcJcKcLcMc' ( ) * + , - . / NcOcPcQcRcScK ubrfsftfufvfrew 6 7 ! Eb
644 return stream 2vblbmfx D E nfy of$ pfv wbz % Fcxbqf9 a b c d e f g h i j k l m n o p F q r s t u G H I J HcIcJcKcLcMc' ( ) * + , - . / NcOcPcQcRcScK ubrfsftfufvfrew 6 7 ! Eb
645 elif allow_stream_protocol and hasattr(arg, "__cuda_stream__"): 2P hbDm
646 stream = Stream._init(arg) 2P hb
647 warnings.warn( 1P
648 "Passing foreign stream objects to this function via the "
649 "stream protocol is deprecated. Convert the object explicitly "
650 "using Stream(obj) instead.",
651 stacklevel=2,
652 category=DeprecationWarning, 1P
653 )
654 return stream 1P
655 raise TypeError(f"Stream or GraphBuilder expected, got {type(arg).__name__}") 2Dm