Coverage for cuda / core / _graph / _graphdef.pyx: 89.99%

799 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-25 01:07 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5""" 

6Private module for explicit CUDA graph construction. 

7  

8This module provides GraphDef and a GraphNode class hierarchy for building CUDA 

9graphs explicitly (as opposed to stream capture). Both approaches produce 

10the same public Graph type for execution. 

11  

12GraphNode hierarchy: 

13 GraphNode (base — also used for the internal entry point) 

14 ├── EmptyNode (synchronization / join point) 

15 ├── KernelNode (kernel launch) 

16 ├── AllocNode (memory allocation, exposes dptr and bytesize) 

17 ├── FreeNode (memory free, exposes dptr) 

18 ├── MemsetNode (memory set, exposes dptr, value, element_size, etc.) 

19 ├── MemcpyNode (memory copy, exposes dst, src, size) 

20 ├── ChildGraphNode (embedded sub-graph) 

21 ├── EventRecordNode (record an event) 

22 ├── EventWaitNode (wait for an event) 

23 ├── HostCallbackNode (host CPU callback) 

24 └── ConditionalNode (conditional execution — base for reconstruction) 

25 ├── IfNode (if-then conditional, 1 branch) 

26 ├── IfElseNode (if-then-else conditional, 2 branches) 

27 ├── WhileNode (while-loop conditional, 1 branch) 

28 └── SwitchNode (switch conditional, N branches) 

29""" 

30  

31from __future__ import annotations 

32  

33from cpython.ref cimport Py_INCREF 

34  

35from libc.stddef cimport size_t 

36from libc.stdint cimport uintptr_t 

37from libc.stdlib cimport malloc, free 

38from libc.string cimport memset as c_memset, memcpy as c_memcpy 

39  

40from libcpp.vector cimport vector 

41  

42from cuda.bindings cimport cydriver 

43  

44from cuda.core._event cimport Event 

45from cuda.core._kernel_arg_handler cimport ParamHolder 

46from cuda.core._launch_config cimport LaunchConfig 

47from cuda.core._module cimport Kernel 

48from cuda.core._resource_handles cimport ( 

49 EventHandle, 

50 GraphHandle, 

51 KernelHandle, 

52 GraphNodeHandle, 

53 as_cu, 

54 as_intptr, 

55 as_py, 

56 create_event_handle_ref, 

57 create_graph_handle, 

58 create_graph_handle_ref, 

59 create_kernel_handle_ref, 

60 create_graph_node_handle, 

61 graph_node_get_graph, 

62) 

63from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value 

64  

65from dataclasses import dataclass 

66  

67from cuda.core import Device 

68from cuda.core._utils.cuda_utils import driver, handle_return 

69  

70__all__ = [ 

71 "Condition", 

72 "GraphAllocOptions", 

73 "GraphDef", 

74 "GraphNode", 

75 "EmptyNode", 

76 "KernelNode", 

77 "AllocNode", 

78 "FreeNode", 

79 "MemsetNode", 

80 "MemcpyNode", 

81 "ChildGraphNode", 

82 "EventRecordNode", 

83 "EventWaitNode", 

84 "HostCallbackNode", 

85 "ConditionalNode", 

86 "IfNode", 

87 "IfElseNode", 

88 "WhileNode", 

89 "SwitchNode", 

90] 

91  

92  

93cdef bint _has_cuGraphNodeGetParams = False 

94cdef bint _version_checked = False 

95  

96cdef bint _check_node_get_params(): 

97 global _has_cuGraphNodeGetParams, _version_checked 

98 if not _version_checked: 2ZcOkPkQkRkLc

99 ver = handle_return(driver.cuDriverGetVersion()) 2Lc

100 _has_cuGraphNodeGetParams = ver >= 13020 2Lc

101 _version_checked = True 2Lc

102 return _has_cuGraphNodeGetParams 2ZcOkPkQkRkLc

103  

104  

105cdef extern from "Python.h": 

106 void _py_decref "Py_DECREF" (void*) 

107  

108  

109cdef void _py_host_trampoline(void* data) noexcept with gil: 

110 (<object>data)() 

111  

112  

113cdef void _py_host_destructor(void* data) noexcept with gil: 

114 _py_decref(data) 29p!p#p$p%p'p(p)p*p+p,p-p.pai/p:p;p=p/m?p@p[p]p^p:m;m_p`p{p|p}p~paq=mbqcqdqeqfqgqhqiqjq?mkqlqmqnqoq@m[mpqqqrqsqtquqvq]mwqxqyqzqAqBqCqDqEqFqGqHqIqJq

115  

116  

117cdef void _destroy_event_handle_copy(void* ptr) noexcept nogil: 

118 cdef EventHandle* p = <EventHandle*>ptr 2|m}m~manbncndnenfngnhninjn'jId(jJd)jknlnmnnnonpnqnrnimjmsntnunvnwnxnynznAnBnCn:mDnEnFnGn;mHnInJnKnLnMnNnOnPnQnkmlmRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8nmmnm9n!n#n$n%n'n(n)n*n+n,n@m-n.n/n:n[m;n=n?n@n[n]n^n_n`n{nompm|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyo

119 del p 2|m}m~manbncndnenfngnhninjn'jId(jJd)jknlnmnnnonpnqnrnimjmsntnunvnwnxnynznAnBnCn:mDnEnFnGn;mHnInJnKnLnMnNnOnPnQnkmlmRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8nmmnm9n!n#n$n%n'n(n)n*n+n,n@m-n.n/n:n[m;n=n?n@n[n]n^n_n`n{nompm|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyo

120  

121  

122cdef void _destroy_kernel_handle_copy(void* ptr) noexcept nogil: 

123 cdef KernelHandle* p = <KernelHandle*>ptr 2zoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoX V Y Z )bBhxhLbToUoVoWoXoYoZo0o1oimjm/m2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.okmlm/o=m:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpmmnm?mipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpompmCp]mDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p

124 del p 2zoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoX V Y Z )bBhxhLbToUoVoWoXoYoZo0o1oimjm/m2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.okmlm/o=m:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpmmnm?mipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpompmCp]mDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p

125  

126  

127cdef void _attach_user_object( 

128 cydriver.CUgraph graph, void* ptr, 

129 cydriver.CUhostFn destroy) except *: 

130 """Create a CUDA user object and transfer ownership to the graph. 

131  

132 On success the graph owns the resource (via MOVE semantics). 

133 On failure the destroy callback is invoked to clean up ptr, 

134 then a CUDAError is raised — callers need no try/except. 

135 """ 

136 cdef cydriver.CUuserObject user_obj = NULL 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h

137 cdef cydriver.CUresult ret 

138 with nogil: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h

139 ret = cydriver.cuUserObjectCreate( 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h

140 &user_obj, ptr, destroy, 1, 

141 cydriver.CU_USER_OBJECT_NO_DESTRUCTOR_SYNC) 

142 if ret == cydriver.CUDA_SUCCESS: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h

143 ret = cydriver.cuGraphRetainUserObject( 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h

144 graph, user_obj, 1, cydriver.CU_GRAPH_USER_OBJECT_MOVE) 

145 if ret != cydriver.CUDA_SUCCESS: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h

146 cydriver.cuUserObjectRelease(user_obj, 1) 

147 if ret != cydriver.CUDA_SUCCESS: 2[hBd.hIjJj]h^h_h`h{h0cAi9d;d=dcjdjmc!d?d@dejfjnc#d[d]dgjhjoc$d^d_dijjjpc%d`d{dkjljqc'd|d}dmjnjrcyhX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbai=cOjPjKh/fKd-j.jBiLhEb(d)dMcjcLd/j:jCiMhgchcUb0 1 2 3 Fcnioi5f5eMd;j=jDiNhNd?j@jEiOhG acbcObubOd[j]jFiPhQh'eNcOcPcQc(eRcScTcUcN kclcXbCd*j+jpiDh.b/b:b;bPd^j_jGiRhQd~daeIbWcYbZbp W 0b1bRd`j{jHiShb y z s v MbNb$ Sd|j}jIiThTd~jakJiUhUdbkckKiVhVddkekLiWh[ xdydscccWdfkgkMiXh=b?bJbQ R S T tcbiciTfNeXdhkikNiYhYdjkkkOiZhA +b,bHb= ZdlkmkPi0h;ggeucvcwcxcheyczcAcBcH dcecPbzd!j#jdiAh5b6b7b8b0dnkokQi1hsdDdEdvbGcQbRbo O SbTb1dpkqkRi2ha w x q t FbGb4 2drkskSi3htd4j5j/h=g3dtkukTi4hudAkBkqi,hvd6j7j:h?g4dvkwkUi5h5dxkykVi6h?cQjRj7h:f@cSjTj8h;f*dDkEkoj;h+dFkGkpj=h

148 if user_obj == NULL: 

149 destroy(ptr) 

150 HANDLE_RETURN(ret) 

151  

152  

153cdef class Condition: 

154 """Wraps a CUgraphConditionalHandle. 

155  

156 Created by :meth:`GraphDef.create_condition` and passed to 

157 conditional-node builder methods (``if_cond``, ``if_else``, 

158 ``while_loop``, ``switch``). The underlying value is set at 

159 runtime by device code via ``cudaGraphSetConditional``. 

160 """ 

161  

162 def __repr__(self) -> str: 

163 return f"<Condition handle=0x{<unsigned long long>self._c_handle:x}>" 2!k

164  

165 def __eq__(self, other) -> bool: 

166 if not isinstance(other, Condition): 2FldlKlGlWk0kUftcXcbicirdTfVfWfNeP @bUkXfYf1k2k3kXk4k5k6k7k8kYkZk

167 return NotImplemented 2Wk0kUftcXcbicirdTfVfWfNeP @bUkXfYf1k2k3kXk4k5k6k7k

168 return self._c_handle == (<Condition>other)._c_handle 2FldlKlGlWk8kYkZk

169  

170 def __hash__(self) -> int: 

171 return hash(<unsigned long long>self._c_handle) 2#k$k6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k'k(k9k)k*k+k,k-k.k/kYkZk

172  

173 @property 

174 def handle(self) -> int: 

175 """The raw CUgraphConditionalHandle as an int.""" 

176 return <unsigned long long>self._c_handle 2Wk

177  

178  

179cdef ConditionalNode _make_conditional_node( 

180 GraphNode pred, 

181 Condition condition, 

182 cydriver.CUgraphConditionalNodeType cond_type, 

183 unsigned int size, 

184 type node_cls): 

185 if not isinstance(condition, Condition): 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

186 raise TypeError( 

187 f"condition must be a Condition object (from " 

188 f"GraphDef.create_condition()), got {type(condition).__name__}") 

189 cdef cydriver.CUgraphNodeParams params 

190 cdef cydriver.CUgraphNode new_node = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

191  

192 c_memset(&params, 0, sizeof(params)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

193 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

194 params.conditional.handle = condition._c_handle 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

195 params.conditional.type = cond_type 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

196 params.conditional.size = size 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

197  

198 cdef cydriver.CUcontext ctx = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

199 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

200 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

201 cdef cydriver.CUgraphNode* deps = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

202 cdef size_t num_deps = 0 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

203  

204 if pred_node != NULL: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

205 deps = &pred_node 

206 num_deps = 1 

207  

208 with nogil: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

209 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

210 params.conditional.ctx = ctx 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

211  

212 with nogil: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

213 IF CUDA_CORE_BUILD_MAJOR >= 13: 

214 HANDLE_RETURN(cydriver.cuGraphAddNode( 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

215 &new_node, as_cu(h_graph), deps, NULL, num_deps, &params)) 

216 ELSE: 

217 HANDLE_RETURN(cydriver.cuGraphAddNode( 

218 &new_node, as_cu(h_graph), deps, num_deps, &params)) 

219  

220 # cuGraphAddNode sets phGraph_out to an internal array of body 

221 # graphs (it replaces the pointer, not writing into a caller array). 

222 cdef list branch_list = [] 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

223 cdef unsigned int i 

224 cdef cydriver.CUgraph bg 

225 cdef GraphHandle h_branch 

226 for i in range(size): 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

227 bg = params.conditional.phGraph_out[i] 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

228 h_branch = create_graph_handle_ref(bg, h_graph) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

229 branch_list.append(GraphDef._from_handle(h_branch)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

230 cdef tuple branches = tuple(branch_list) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

231  

232 cdef ConditionalNode n = node_cls.__new__(node_cls) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

233 n._h_node = create_graph_node_handle(new_node, h_graph) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

234 n._condition = condition 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

235 n._cond_type = cond_type 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

236 n._branches = branches 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

237  

238 pred._succ_cache = None 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

239 return n 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z Lc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

240  

241  

242@dataclass 

243class GraphAllocOptions: 

244 """Options for graph memory allocation nodes. 

245  

246 Attributes 

247 ---------- 

248 device : int or Device, optional 

249 The device on which to allocate memory. If None (default), 

250 uses the current CUDA context's device. 

251 memory_type : str, optional 

252 Type of memory to allocate. One of: 

253  

254 - ``"device"`` (default): Pinned device memory, optimal for GPU kernels. 

255 - ``"host"``: Pinned host memory, accessible from both host and device. 

256 Useful for graphs containing host callback nodes. Note: may not be 

257 supported on all systems/drivers. 

258 - ``"managed"``: Managed/unified memory that automatically migrates 

259 between host and device. Useful for mixed host/device access patterns. 

260  

261 peer_access : list of int or Device, optional 

262 List of devices that should have read-write access to the 

263 allocated memory. If None (default), only the allocating 

264 device has access. 

265  

266 Notes 

267 ----- 

268 - IPC (inter-process communication) is not supported for graph 

269 memory allocation nodes per CUDA documentation. 

270 - The allocation uses the device's default memory pool. 

271 """ 

272  

273 device: int | Device | None = None 

274 memory_type: str = "device" 

275 peer_access: list | None = None 

276  

277  

278cdef class GraphDef: 

279 """Represents a CUDA graph definition (CUgraph). 

280  

281 A GraphDef is used to construct a graph explicitly by adding nodes 

282 and specifying dependencies. Once construction is complete, call 

283 instantiate() to obtain an executable Graph. 

284 """ 

285  

286 def __init__(self): 

287 """Create a new empty graph definition.""" 

288 cdef cydriver.CUgraph graph = NULL 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh

289 with nogil: 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh

290 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh

291 self._h_graph = create_graph_handle(graph) 2qmrmsmtmumvmwmxmymWiieqjzmOeXirjAmBmCmDmEmFmGmHmImBdJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%mYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesj'mRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj(m)m*m+m_k,m:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cWkFdOjPjbeHlKh)e*e/f9 Cc[k+e,e(iKd#koe-j.j[e#lBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLd$kpe/j:j^e$lCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMd%kqe;j=j_e%lDi{f|fNhab5cgl}f~f+iNd'kre?j@j`e'lEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOd(kte[j]j{e(lFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCd9kfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPd)kue^j_j|e)lGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRd*kve`j{j}e*lHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSd+kwe|j}j~e+lIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUd,kyebkckbf,lKiygzgVhib$cmlAgBgOf=iVd-kzedkekcf-lLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWd0kBefkgkdfRlMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXd1kCehkikefSlNiKgLgYhlb(cplMgNg[iYd2kDejkkkffTlOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZd3kEelkmkgfUlPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdXkce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0d4kFenkokhfVlQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1d5kGepkqkifWlRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2d6kHerkskjfXlSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3d7kJetkukkfYlTi8g9g4hrb.cvl!g#g#eajud!k-bAkBkof.lqi.g/g,h@ /ccl(f:g@hvd8k8d6j7jKeZl:hxfyf?g; Kc`kzfAf|i4d.kLevkwklf/lUi$g%g5hsb:cwl'g(g}i5d/kMexkykmf:lVi)g*g6htb;cxl+g,g)h?cYkGdQjRjdeLl7h-e.e:f! Dc]k/e:e*h@cZkHdSjTjeeMl8h;e=e;f# Ec^k?e@eCj*d=k1eDkEkHf-mojohph;hCbpdNlqhrhDj+d?k2eFkGkIf.mpjshth=hDbqdOluhvh

292  

293 @staticmethod 

294 cdef GraphDef _from_handle(GraphHandle h_graph): 

295 """Create a GraphDef from an existing GraphHandle (internal use).""" 

296 cdef GraphDef g = GraphDef.__new__(GraphDef) 2ZcHk@g[g]g^g9j_g`g{g|g0l1l2l3l4l5l}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z )bLbLc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

297 g._h_graph = h_graph 2ZcHk@g[g]g^g9j_g`g{g|g0l1l2l3l4l5l}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z )bLbLc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

298 return g 2ZcHk@g[g]g^g9j_g`g{g|g0l1l2l3l4l5l}g~gahbhchdhehfhghhhihjhkhlhmhnhqfnfrfsfX V Y Z )bLbLc)e*e+e,e=f?f@f[f[b]b^b_b]f^f_f`f0 1 2 3 7f8f9f!f{f|f}f~fagbgcgdg% ' ( ) egfggghgNcOcPcQcRcScTcUc^ _ ` { #f$f%f'f.b/b:b;bJfKfLfMfNfigjgkglgYbZb0b1bmgngogpgg h i j I J K L qgrgsgtgugvgwgxgygzgAgBgOfCgDgEgFg9b!b#b$bGgHgIgJgQ R S T VfWfXfYfKgLgMgNgOgPgQgRg5 6 7 8 SgTgUgVgucvcwcxcyczcAcBc* + , - Zf0f1f2f5b6b7b8b6e7e8e9e!eWgXgYgZgQbRbSbTb0g1g2g3gc d e f B C D E 4g5g6g7gtfufvfwf8g9g!g#g#e.g/g(f:gxfyfzfAf$g%g'g(g)g*g+g,g-e.e/e:e;e=e?e@eohphqhrhshthuhvh

299  

300 def __repr__(self) -> str: 

301 return f"<GraphDef handle=0x{as_intptr(self._h_graph):x}>" 2yhei.l

302  

303 def __eq__(self, other) -> bool: 

304 if not isinstance(other, GraphDef): 29j0l1l2l3l4l5lHlRlSlTlUlfizdXkce!j#j0ediZf0fAh? Vc{k1f2fVlWlXlYlZlLlMl

305 return NotImplemented 2HlRlSlTlUlfizdXkce!j#j0ediZf0fAh? Vc{k1f2fVlWlXlYl

306 return as_intptr(self._h_graph) == as_intptr((<GraphDef>other)._h_graph) 29j0l1l2l3l4l5lHlZlLlMl

307  

308 def __hash__(self) -> int: 

309 return hash(as_intptr(self._h_graph)) 2#l$l%l'l(lriCd9kfe*j+j$epi#f$fDh] Ycbl%f'f)l*l+l,l-l/l:lLlMl

310  

311 @property 

312 def _entry(self) -> GraphNode: 

313 """Return the internal entry-point GraphNode (no dependencies).""" 

314 cdef GraphNode n = GraphNode.__new__(GraphNode) 2WjXj3bTkSkZcsibj|hWiieqjOeXirjfc@k[h;kPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}bKjLjMj%b'b(b0cAiYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesjRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#eajud-bAkBkofqi.g/g,h@ /ccl(f:g@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@eCj*d1eDkEkHfojohph;hCbpdNlqhrhDj+d2eFkGkIfpjshth=hDbqdOluhvh

315 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 2WjXj3bTkSkZcsibj|hWiieqjOeXirjfc@k[h;kPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}bKjLjMj%b'b(b0cAiYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesjRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#eajud-bAkBkofqi.g/g,h@ /ccl(f:g@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@eCj*d1eDkEkHfojohph;hCbpdNlqhrhDj+d2eFkGkIfpjshth=hDbqdOluhvh

316 return n 2WjXj3bTkSkZcsibj|hWiieqjOeXirjfc@k[h;kPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}bKjLjMj%b'b(b0cAiYi9h9dPe;d=dBfcjdj@g[gmcwb[c]c^c_c]g^gZi!h!dQe?d@dCfejfj_g`gncxb`c{c|c}c{g|g0ijesjRe1itj2ikeujSe3ivj4i#h#dTe[d]dDfgjhj}g~gocyb~cadbdcdahbh5i$h$dUe^d_dEfijjjchdhpczbddedfdgdehfh6i%h%dVe`d{dFfkjljghhhqcAbhdidjdkdihjh7i'h'dWe|d}dGfmjnjkhlhrcBbldmdndodmhnh8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBjUj:k3j2b'iyhVjeiqfnfrfsfX V Y Z Chmi)b'jId(jJhzhJd)jBh4b+hxhLbaiLc(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#eajud-bAkBkofqi.g/g,h@ /ccl(f:g@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@eCj*d1eDkEkHfojohph;hCbpdNlqhrhDj+d2eFkGkIfpjshth=hDbqdOluhvh

317  

318 def alloc(self, size_t size, options: GraphAllocOptions | None = None) -> AllocNode: 

319 """Add an entry-point memory allocation node (no dependencies). 

320  

321 See :meth:`GraphNode.alloc` for full documentation. 

322 """ 

323 return self._entry.alloc(size, options) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

324  

325 def free(self, dptr) -> FreeNode: 

326 """Add an entry-point memory free node (no dependencies). 

327  

328 See :meth:`GraphNode.free` for full documentation. 

329 """ 

330 return self._entry.free(dptr) 2:k

331  

332 def memset(self, dst, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode: 

333 """Add an entry-point memset node (no dependencies). 

334  

335 See :meth:`GraphNode.memset` for full documentation. 

336 """ 

337 return self._entry.memset(dst, value, width, height, pitch) 

338  

339 def launch(self, config, kernel, *args) -> KernelNode: 

340 """Add an entry-point kernel launch node (no dependencies). 

341  

342 See :meth:`GraphNode.launch` for full documentation. 

343 """ 

344 return self._entry.launch(config, kernel, *args) 2Bd]h^h_h`h{h0cAi9d!d#d$d%d'dyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

345  

346 def join(self, *nodes) -> EmptyNode: 

347 """Create an empty node that depends on all given nodes. 

348  

349 Parameters 

350 ---------- 

351 *nodes : GraphNode 

352 Nodes to merge. 

353  

354 Returns 

355 ------- 

356 EmptyNode 

357 A new EmptyNode that depends on all input nodes. 

358 """ 

359 return self._entry.join(*nodes) 2Oek l m n %b'b(bPewbQexbReSeTeybUezbVeAbWeBbXeYeZe3jFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

360  

361 def memcpy(self, dst, src, size_t size) -> MemcpyNode: 

362 """Add an entry-point memcpy node (no dependencies). 

363  

364 See :meth:`GraphNode.memcpy` for full documentation. 

365 """ 

366 return self._entry.memcpy(dst, src, size) 

367  

368 def embed(self, child: GraphDef) -> ChildGraphNode: 

369 """Add an entry-point child graph node (no dependencies). 

370  

371 See :meth:`GraphNode.embed` for full documentation. 

372 """ 

373 return self._entry.embed(child) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

374  

375 def record_event(self, event: Event) -> EventRecordNode: 

376 """Add an entry-point event record node (no dependencies). 

377  

378 See :meth:`GraphNode.record_event` for full documentation. 

379 """ 

380 return self._entry.record_event(event) 2.h'j(jJhzhOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

381  

382 def wait_event(self, event: Event) -> EventWaitNode: 

383 """Add an entry-point event wait node (no dependencies). 

384  

385 See :meth:`GraphNode.wait_event` for full documentation. 

386 """ 

387 return self._entry.wait_event(event) 2)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

388  

389 def callback(self, fn, *, user_data=None) -> HostCallbackNode: 

390 """Add an entry-point host callback node (no dependencies). 

391  

392 See :meth:`GraphNode.callback` for full documentation. 

393 """ 

394 return self._entry.callback(fn, user_data=user_data) 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

395  

396 def create_condition(self, default_value: int | None = None) -> Condition: 

397 """Create a condition variable for use with conditional nodes. 

398  

399 The returned :class:`Condition` object is passed to conditional-node 

400 builder methods. Its value is controlled at runtime by device code 

401 via ``cudaGraphSetConditional``. 

402  

403 Parameters 

404 ---------- 

405 default_value : int, optional 

406 The default value to assign to the condition. 

407 If None, no default is assigned. 

408  

409 Returns 

410 ------- 

411 Condition 

412 A condition variable for controlling conditional execution. 

413 """ 

414 cdef cydriver.CUgraphConditionalHandle c_handle 

415 cdef unsigned int flags = 0 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

416 cdef unsigned int default_val = 0 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

417  

418 if default_value is not None: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

419 default_val = <unsigned int>default_value 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

420 flags = cydriver.CU_GRAPH_COND_ASSIGN_DEFAULT 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUjVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

421  

422 cdef cydriver.CUcontext ctx = NULL 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

423 with nogil: 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

424 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

425 HANDLE_RETURN(cydriver.cuGraphConditionalHandleCreate( 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

426 &c_handle, as_cu(self._h_graph), ctx, default_val, flags)) 

427  

428 cdef Condition cond = Condition.__new__(Condition) 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

429 cond._c_handle = c_handle 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

430 return cond 2Zc@g[g]g^g_g`g{g|g}g~gahbhchdhehfhghhhihjhkhlhmhnhUj_kVjqfnfrfsfX V Y Z LcWk)e*e+e,e#k=f?f@f[f[b]b^b_b$k]f^f_f`f0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f%k{f|f}f~f'kagbgcgdg% ' ( ) (kegfggghgNcOcPcQcRcScTcUc^ _ ` { 9k#f$f%f'f.b/b:b;bJfKfLfMfNf)kigjgkglgYbZb0b1b*kmgngogpgg h i j I J K L +kqgrgsgtgugvgwgxg,kygzgAgBgOf-kCgDgEgFg9b!b#b$b0kGgHgIgJgQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf1kKgLgMgNg2kOgPgQgRg5 6 7 8 3kSgTgUgVgucvcwcxcyczcAcBc* + , - XkZf0f1f2f5b6b7b8b6e7e8e9e!e4kWgXgYgZgQbRbSbTb5k0g1g2g3gc d e f B C D E 6k4g5g6g7gtfufvfwf7k8g9g!g#g#e!k.g/g(f:g8kxfyfzfAf.k$g%g'g(g/k)g*g+g,gYk-e.e/e:eZk;e=e?e@e=kohphqhrh?kshthuhvh

431  

432 def if_cond(self, condition: Condition) -> IfNode: 

433 """Add an entry-point if-conditional node (no dependencies). 

434  

435 See :meth:`GraphNode.if_cond` for full documentation. 

436 """ 

437 return self._entry.if_cond(condition) 2Zc@g_g}gchghkhUjqfX *e?f]b^f1 8f|fbg' fgOcSc_ $f/bLfMfNfjgZbngh J rgvgzgDg!bHgR WfLgPg6 Tgvczc+ 0f6b8e9e!eXgRb1gd C 5guf9g/gyf%g*g.e=ephth

438  

439 def if_else(self, condition: Condition) -> IfElseNode: 

440 """Add an entry-point if-else conditional node (no dependencies). 

441  

442 See :meth:`GraphNode.if_else` for full documentation. 

443 """ 

444 return self._entry.if_else(condition) 2[g`g~gdhhhlhnfV )e=f[b]f0 7f{fag% egNcRc^ #f.bJfKfLfigYbmgg I qgugygCg9bGgQ VfKgOg5 Sgucyc* Zf5b6e7e8eWgQb0gc B 4gtf8g.gxf$g)g-e;eohsh

445  

446 def while_loop(self, condition: Condition) -> WhileNode: 

447 """Add an entry-point while-loop conditional node (no dependencies). 

448  

449 See :meth:`GraphNode.while_loop` for full documentation. 

450 """ 

451 return self._entry.while_loop(condition) 2^g|gbhfhjhnhsfZ Lc,e[f_b`f3 !f~fdg) hgQcUc{ 'f;bKfNflg1bpgj L tgxgBgOfFg$bJgT YfNgRg8 VgxcBc- 2f8b7e!eZgTb3gf E 7gwf#g#e:gAf(g,g:e@erhvh

452  

453 def switch(self, condition: Condition, unsigned int count) -> SwitchNode: 

454 """Add an entry-point switch conditional node (no dependencies). 

455  

456 See :meth:`GraphNode.switch` for full documentation. 

457 """ 

458 return self._entry.switch(condition, count) 2]g{gahehihmhVjrfY +e@f^b_f2 9f}fcg( ggPcTc` %f:bJfMfkg0bogi K sgwgAgOfEg#bIgS XfMgQg7 UgwcAc, 1f7b6e9eYgSb2ge D 6gvf!g#e(fzf'g+g/e?eqhuh

459  

460 def instantiate(self, options=None): 

461 """Instantiate the graph definition into an executable Graph. 

462  

463 Parameters 

464 ---------- 

465 options : :obj:`~_graph.GraphCompleteOptions`, optional 

466 Customizable dataclass for graph instantiation options. 

467  

468 Returns 

469 ------- 

470 Graph 

471 An executable graph that can be launched on a stream. 

472 """ 

473 from cuda.core._graph import _instantiate_graph 2[hPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}b^m_m`mKjLjMjyheiChmizh4bxhai

474  

475 return _instantiate_graph( 2[hPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}b^m_m`mKjLjMjyheiChmizh4bxhai

476 driver.CUgraph(as_intptr(self._h_graph)), options) 2[hPfQfRfSfBd.hIjJj]h^h_h`h{hk l m n `b{b|b}b^m_m`mKjLjMjyheiChmizh4bxhai

477  

478 def debug_dot_print(self, path: str, options=None) -> None: 

479 """Write a GraphViz DOT representation of the graph to a file. 

480  

481 Parameters 

482 ---------- 

483 path : str 

484 File path for the DOT output. 

485 options : GraphDebugPrintOptions, optional 

486 Customizable options for the debug print. 

487 """ 

488 from cuda.core._graph import GraphDebugPrintOptions 2sibj|h

489  

490 cdef unsigned int flags = 0 2sibj|h

491 if options is not None: 2sibj|h

492 if not isinstance(options, GraphDebugPrintOptions): 2bj|h

493 raise TypeError("options must be a GraphDebugPrintOptions instance") 2bj

494 flags = options._to_flags() 2|h

495  

496 cdef bytes path_bytes = path.encode('utf-8') 2si|h

497 cdef const char* c_path = path_bytes 2si|h

498 with nogil: 2si|h

499 HANDLE_RETURN(cydriver.cuGraphDebugDotPrint(as_cu(self._h_graph), c_path, flags)) 2si|h

500  

501 def nodes(self) -> tuple: 

502 """Return all nodes in the graph. 

503  

504 Returns 

505 ------- 

506 tuple of GraphNode 

507 All nodes in the graph. 

508 """ 

509 cdef size_t num_nodes = 0 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc

510  

511 with nogil: 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc

512 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), NULL, &num_nodes)) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc

513  

514 if num_nodes == 0: 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk;l%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jqfnfrfsfX V Y Z )bLbLc

515 return () 2;lqfnfrfsf

516  

517 cdef vector[cydriver.CUgraphNode] nodes_vec 

518 nodes_vec.resize(num_nodes) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc

519 with nogil: 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc

520 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc

521  

522 return tuple(GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes)) 2ZcHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkZjEj0jFj1j2j3jX V Y Z )bLbLc

523  

524 def edges(self) -> tuple: 

525 """Return all edges in the graph as (from_node, to_node) pairs. 

526  

527 Returns 

528 ------- 

529 tuple of tuple 

530 Each element is a (from_node, to_node) pair representing 

531 a dependency edge in the graph. 

532 """ 

533 cdef size_t num_edges = 0 2GjkiPl=lliHjQl

534  

535 with nogil: 2GjkiPl=lliHjQl

536 IF CUDA_CORE_BUILD_MAJOR >= 13: 

537 HANDLE_RETURN(cydriver.cuGraphGetEdges(as_cu(self._h_graph), NULL, NULL, NULL, &num_edges)) 2GjkiPl=lliHjQl

538 ELSE: 

539 HANDLE_RETURN(cydriver.cuGraphGetEdges(as_cu(self._h_graph), NULL, NULL, &num_edges)) 

540  

541 if num_edges == 0: 2GjkiPl=lliHjQl

542 return () 2Pl=lQl

543  

544 cdef vector[cydriver.CUgraphNode] from_nodes 

545 cdef vector[cydriver.CUgraphNode] to_nodes 

546 from_nodes.resize(num_edges) 2GjkiliHj

547 to_nodes.resize(num_edges) 2GjkiliHj

548 with nogil: 2GjkiliHj

549 IF CUDA_CORE_BUILD_MAJOR >= 13: 

550 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2GjkiliHj

551 as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), NULL, &num_edges)) 

552 ELSE: 

553 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

554 as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), &num_edges)) 

555  

556 return tuple( 2GjkiliHj

557 (GraphNode._create(self._h_graph, from_nodes[i]), 2GjkiliHj

558 GraphNode._create(self._h_graph, to_nodes[i])) 2GjkiliHj

559 for i in range(num_edges) 2GjkiliHj

560 ) 

561  

562 @property 

563 def handle(self) -> int: 

564 """Return the underlying CUgraph handle.""" 

565 return as_py(self._h_graph) 2KqJh+hHl

566  

567  

568cdef class GraphNode: 

569 """Base class for all graph nodes. 

570  

571 Nodes are created by calling builder methods on GraphDef (for 

572 entry-point nodes with no dependencies) or on other Nodes (for 

573 nodes that depend on a predecessor). 

574 """ 

575  

576 @staticmethod 

577 cdef GraphNode _create(GraphHandle h_graph, cydriver.CUgraphNode node): 

578 """Factory: dispatch to the right subclass based on node type.""" 

579 if node == NULL: 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b

580 n = GraphNode.__new__(GraphNode) 

581 (<GraphNode>n)._h_node = create_graph_node_handle(node, h_graph) 

582 return n 

583  

584 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b

585 cdef cydriver.CUgraphNodeType node_type 

586 with nogil: 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b

587 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b

588  

589 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 23bZcGjkiliHjfc%b'b(b0cHk~igi9j}h~hhi,j)fpf*f+f,f-fIk$jJk%jKkLk8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi3j2bX V Y Z )b4bLbLc-b

590 return EmptyNode._create_impl(h_node) 2kilipf$j%jNj3f4f.fEjFj-hMk3j

591 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

592 return KernelNode._create_from_driver(h_node) 20cHk)fEh,dX V Y Z )b4bLb

593 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

594 return AllocNode._create_from_driver(h_node) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

595 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

596 return FreeNode._create_from_driver(h_node) 23bhiti%e

597 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

598 return MemsetNode._create_from_driver(h_node) 2*f+f,f-fFhGhHhIh-d.d/d:d

599 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

600 return MemcpyNode._create_from_driver(h_node) 2pf3f.f

601 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

602 return ChildGraphNode._create_from_driver(h_node) 29jNkLb

603 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

604 return EventRecordNode._create_from_driver(h_node) 2}hii3e

605 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

606 return EventWaitNode._create_from_driver(h_node) 2~hji4e

607 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

608 return HostCallbackNode._create_from_driver(h_node) 2,jzkCk

609 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

610 return ConditionalNode._create_from_driver(h_node) 2ZcOkPkQkRkLc

611 else: 

612 n = GraphNode.__new__(GraphNode) 

613 (<GraphNode>n)._h_node = h_node 

614 return n 

615  

616 def __repr__(self) -> str: 

617 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2cl

618 if node == NULL: 2cl

619 return "<GraphNode entry>" 2cl

620 return f"<GraphNode handle=0x{<uintptr_t>node:x}>" 

621  

622 def __eq__(self, other) -> bool: 

623 if not isinstance(other, GraphNode): 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b?iWdBefkgkdfMiGgHgXhkb'colIgJg=b?bJbQ R S T UftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg6dA +b,bicHb5 6 = / Kb7 8 ]iZdEelkmkgfPiSgTg0hnb*crlUgVg;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - fizdce!j#j0ediZf0fAh? Vc{k1f2f5b6b7b8b6e7e8e9e!e^i0dFenkokhfQiWgXg1hob+cslYgZgsdDdEdvbGcQbRbo O SbTb_i1dGepkqkifRi0g1g2hpb,ctl2g3ga w x q c d e f t FbGb4 B C r D E `i2dHerkskjfSi4g5g3hqb-cul6g7g?htd7d4j5jIe/htfuf=g: Jcvfwf{i3dJetkukkfTi8g9g4hrb.cvl!g#g#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

624 return NotImplemented 2(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e?iWdBefkgkdfMiGgHgXhkb'colIgJgUftcXcbicirdTfVfWfNeP @bUkXfYf@iXdCehkikefNiKgLgYhlb(cplMgNg[iYdDejkkkffOiOgPgZhmb)cqlQgRg]iZdEelkmkgfPiSgTg0hnb*crlUgVgfizdce!j#j0ediZf0fAh? Vc{k1f2f^i0dFenkokhfQiWgXg1hob+cslYgZg_i1dGepkqkifRi0g1g2hpb,ctl2g3g`i2dHerkskjfSi4g5g3hqb-cul6g7g{i3dJetkukkfTi8g9g4hrb.cvl!g#g

625 cdef GraphNode o = <GraphNode>other 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

626 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

627 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

628 return (as_intptr(self._h_node) == as_intptr(o._h_node) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

629 and as_intptr(self_graph) == as_intptr(other_graph)) 23bZcGjkiliHjfc%b'b(b0c~igi9j}h~hhi,j)fpf*f+f,f-f8jYjNkNjiijitizkCkOkPkEh3fFhGhHhIhQkRkwh-g4f3e4e%e,d.f-d.d/d:dZjEj0jFj1j2juiviwixiyi-hMkzi2b(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e[ xdydAesc9b!bcc. Ic#b$b=b?bJbQ R S T 6dA +b,bicHb5 6 = / Kb7 8 ;ggeucvcwcxcheyczcAcBcH dcecPb* + F Wb, - 5b6b7b8b6e7e8e9e!esdDdEdvbGcQbRbo O SbTba w x q c d e f t FbGb4 B C r D E ?htd7d4j5jIe/htfuf=g: Jcvfwf#e@hvd8d6j7jKe:hxfyf?g; Kc`kzfAf)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

630  

631 def __hash__(self) -> int: 

632 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2GjkiPlliHjQl%b'b(bZjEj0jFj1j2juivi|kwixi}kyi-h~kMkzial2b(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

633 return hash((as_intptr(self._h_node), as_intptr(g))) 2GjkiPlliHjQl%b'b(bZjEj0jFj1j2juivi|kwixi}kyi-h~kMkzial2b(iKdoe-j.j[eBi=f?fLh| 2cel@f[fEb(d)d]eMc[b]bjc} 3c^b_b)iLdpe/j:j^eCi]f^fMh~ 4cfl_f`fgchcUb0 1 2 3 6fFc1cnioiwd5f7f8f5eU ~bVk9f!f*iMdqe;j=j_eDi{f|fNhab5cgl}f~f+iNdre?j@j`eEiagbgOhbb6chlcgdgseG acbcHcOb% ' ubcbVb( ) ,iOdte[j]j{eFiegfgPhdb7cilgghgQh'eNcOcPcQc(eRcScTcUcN kclcXb^ _ M *b` { riCdfe*j+j$epi#f$fDh] Ycbl%f'f.b/b:b;bJfKfLfMfNf-iPdue^j_j|eGiigjgRheb8cjlkglgQd~daeIbWcYbZbp W 0b1b.iRdve`j{j}eHimgngShfb9cklogpgb y z s g h i j v MbNb$ I J u K L /iSdwe|j}j~eIiqgrgThgb!cllsgtg:iTdxe~jakafJiugvgUhhb#cwgxg;iUdyebkckbfKiygzgVhib$cmlAgBgOf=iVdzedkekcfLiCgDgWhjb%cnlEgFg|i4dLevkwklfUi$g%g5hsb:cwl'g(g}i5dMexkykmfVi)g*g6htb;cxl+g,g)h?cGdQjRjde7h-e.e:f! Dc]k/e:e*h@cHdSjTjee8h;e=e;f# Ec^k?e@e

634  

635 @property 

636 def type(self): 

637 """Return the CUDA graph node type. 

638  

639 Returns 

640 ------- 

641 CUgraphNodeType or None 

642 The node type enum value, or None for the entry node. 

643 """ 

644 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2@k?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm

645 if node == NULL: 2@k?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm

646 return None 2@k

647 cdef cydriver.CUgraphNodeType node_type 

648 with nogil: 2?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm

649 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm

650 return driver.CUgraphNodeType(<int>node_type) 2?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhm

651  

652 @property 

653 def graph(self) -> GraphDef: 

654 """Return the GraphDef this node belongs to.""" 

655 return GraphDef._from_handle(graph_node_get_graph(self._h_node)) 20l1l2l3l4l5l

656  

657 @property 

658 def handle(self) -> int | None: 

659 """Return the underlying CUgraphNode handle as an int. 

660  

661 Returns None for the entry node. 

662 """ 

663 return as_py(self._h_node) 2(h=cFdOjPjbeKh)e*e/f9 Cc[k+e,e

664  

665 @property 

666 def pred(self) -> tuple: 

667 """Return the predecessor nodes (dependencies) of this node. 

668  

669 Results are cached since a node's dependencies are immutable 

670 once created. 

671  

672 Returns 

673 ------- 

674 tuple of GraphNode 

675 The nodes that this node depends on. 

676 """ 

677 if self._pred_cache is not None: 23bfc@k%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b

678 return self._pred_cache 20c

679  

680 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 23bfc@k%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b

681 if node == NULL: 23bfc@k%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b

682 self._pred_cache = () 2@k

683 return self._pred_cache 2@k

684  

685 cdef size_t num_deps = 0 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b

686  

687 with nogil: 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b

688 IF CUDA_CORE_BUILD_MAJOR >= 13: 

689 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, NULL, NULL, &num_deps)) 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b

690 ELSE: 

691 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, NULL, &num_deps)) 

692  

693 if num_deps == 0: 23bfc%b'b(b0cwh-gyl4f3e4e%ezlAlBlCl,d.f-d.d/d:dDlEluivi|kwixi}k2b4b-b

694 self._pred_cache = () 2ylzlAlBlClDlEluivi|kwixi}k

695 return self._pred_cache 2ylzlAlBlClDlEluivi|kwixi}k

696  

697 cdef vector[cydriver.CUgraphNode] deps 

698 deps.resize(num_deps) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b

699 with nogil: 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b

700 IF CUDA_CORE_BUILD_MAJOR >= 13: 

701 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, deps.data(), NULL, &num_deps)) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b

702 ELSE: 

703 HANDLE_RETURN(cydriver.cuGraphNodeGetDependencies(node, deps.data(), &num_deps)) 

704  

705 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b

706 self._pred_cache = tuple(GraphNode._create(h_graph, deps[i]) for i in range(num_deps)) 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b

707 return self._pred_cache 23bfc%b'b(b0cwh-g4f3e4e%e,d.f-d.d/d:duiviwixi2b4b-b

708  

709 @property 

710 def succ(self) -> tuple: 

711 """Return the successor nodes (dependents) of this node. 

712  

713 Results are cached and automatically invalidated when new 

714 dependent nodes are added via builder methods. 

715  

716 Returns 

717 ------- 

718 tuple of GraphNode 

719 The nodes that depend on this node. 

720 """ 

721 if self._succ_cache is not None: 2@kwh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial

722 return self._succ_cache 

723  

724 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2@kwh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial

725 if node == NULL: 2@kwh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial

726 self._succ_cache = () 2@k

727 return self._succ_cache 2@k

728  

729 cdef size_t num_deps = 0 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial

730  

731 with nogil: 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial

732 IF CUDA_CORE_BUILD_MAJOR >= 13: 

733 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, NULL, NULL, &num_deps)) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial

734 ELSE: 

735 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, NULL, &num_deps)) 

736  

737 if num_deps == 0: 2wh-g4f3e4e%e,d.f-d.d/d:dyi-h~kMkzial

738 self._succ_cache = () 2yi-h~kMkzial

739 return self._succ_cache 2yi-h~kMkzial

740  

741 cdef vector[cydriver.CUgraphNode] deps 

742 deps.resize(num_deps) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi

743 with nogil: 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi

744 IF CUDA_CORE_BUILD_MAJOR >= 13: 

745 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, deps.data(), NULL, &num_deps)) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi

746 ELSE: 

747 HANDLE_RETURN(cydriver.cuGraphNodeGetDependentNodes(node, deps.data(), &num_deps)) 

748  

749 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi

750 self._succ_cache = tuple(GraphNode._create(h_graph, deps[i]) for i in range(num_deps)) 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi

751 return self._succ_cache 2wh-g4f3e4e%e,d.f-d.d/d:dyi-hMkzi

752  

753 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode: 

754 """Add a kernel launch node depending on this node. 

755  

756 Parameters 

757 ---------- 

758 config : LaunchConfig 

759 Launch configuration (grid, block, shared memory, etc.) 

760 kernel : Kernel 

761 The kernel to launch. 

762 *args 

763 Kernel arguments. 

764  

765 Returns 

766 ------- 

767 KernelNode 

768 A new KernelNode representing the kernel launch. 

769 """ 

770 cdef LaunchConfig conf = config 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

771 cdef Kernel ker = <Kernel>kernel 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

772 cdef ParamHolder ker_args = ParamHolder(args) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

773  

774 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params 

775 cdef cydriver.CUgraphNode new_node = NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

776 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

777 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

778 cdef cydriver.CUgraphNode* deps = NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

779 cdef size_t num_deps = 0 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

780  

781 if pred_node != NULL: 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

782 deps = &pred_node 20cmcncocpcqcrc

783 num_deps = 1 20cmcncocpcqcrc

784  

785 node_params.kern = as_cu(ker._h_kernel) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

786 node_params.func = <cydriver.CUfunction>NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

787 node_params.gridDimX = conf.grid[0] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

788 node_params.gridDimY = conf.grid[1] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

789 node_params.gridDimZ = conf.grid[2] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

790 node_params.blockDimX = conf.block[0] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

791 node_params.blockDimY = conf.block[1] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

792 node_params.blockDimZ = conf.block[2] 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

793 node_params.sharedMemBytes = conf.shmem_size 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

794 node_params.kernelParams = <void**><uintptr_t>(ker_args.ptr) 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

795 node_params.extra = NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

796 node_params.ctx = <cydriver.CUcontext>NULL 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

797  

798 with nogil: 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

799 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

800 &new_node, as_cu(h_graph), deps, num_deps, &node_params)) 

801  

802 _attach_user_object(as_cu(h_graph), <void*>new KernelHandle(ker._h_kernel), 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

803 <cydriver.CUhostFn>_destroy_kernel_handle_copy) 

804  

805 self._succ_cache = None 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

806 return KernelNode._create_with_params( 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

807 create_graph_node_handle(new_node, h_graph), 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

808 conf.grid, conf.block, conf.shmem_size, 2Bd]h^h_h`h{h0cAi9dmc!dnc#doc$dpc%dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

809 ker._h_kernel) 

810  

811 def join(self, *nodes: GraphNode) -> EmptyNode: 

812 """Create an empty node that depends on this node and all given nodes. 

813  

814 This is used to synchronize multiple branches of execution. 

815  

816 Parameters 

817 ---------- 

818 *nodes : GraphNode 

819 Additional nodes to depend on. 

820  

821 Returns 

822 ------- 

823 EmptyNode 

824 A new EmptyNode that depends on all input nodes. 

825 """ 

826 cdef vector[cydriver.CUgraphNode] deps 

827 cdef cydriver.CUgraphNode new_node = NULL 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

828 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

829 cdef GraphNode other 

830 cdef cydriver.CUgraphNode* deps_ptr = NULL 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

831 cdef size_t num_deps = 0 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

832 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

833  

834 if pred_node != NULL: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

835 deps.push_back(pred_node) 2iejekelemene2b

836 for other in nodes: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

837 if as_cu((<GraphNode>other)._h_node) != NULL: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZeFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

838 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZeFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

839  

840 num_deps = deps.size() 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

841 if num_deps > 0: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

842 deps_ptr = deps.data() 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

843  

844 with nogil: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

845 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

846 &new_node, as_cu(h_graph), deps_ptr, num_deps)) 

847  

848 self._succ_cache = None 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

849 for other in nodes: 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

850 (<GraphNode>other)._succ_cache = None 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZeFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

851 return EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph)) 2ieOek l m n %b'b(bPewbQexbjeRekeSeTeybUezbVeAbWeBbleXemeYeneZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

852  

853 def alloc(self, size_t size, options: GraphAllocOptions | None = None) -> AllocNode: 

854 """Add a memory allocation node depending on this node. 

855  

856 Parameters 

857 ---------- 

858 size : int 

859 Number of bytes to allocate. 

860 options : GraphAllocOptions, optional 

861 Allocation options. If None, allocates on the current device. 

862  

863 Returns 

864 ------- 

865 AllocNode 

866 A new AllocNode representing the allocation. Access the allocated 

867 device pointer via the dptr property. 

868 """ 

869 cdef int device_id 

870 cdef cydriver.CUdevice dev 

871  

872 if options is None or options.device is None: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

873 with nogil: 23bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

874 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 23bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

875 device_id = <int>dev 23bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

876 else: 

877 device_id = getattr(options.device, 'device_id', options.device) 2WjXj

878  

879 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

880 cdef cydriver.CUgraphNode new_node = NULL 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

881 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

882 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

883 cdef cydriver.CUgraphNode* deps = NULL 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

884 cdef size_t num_deps = 0 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

885  

886 if pred_node != NULL: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

887 deps = &pred_node 23bWiieXiYi9hZi!h0ije1i2ike3i4i#h5i$h6i%h7i'h8ile9i!ime#i$ine%i

888 num_deps = 1 23bWiieXiYi9hZi!h0ije1i2ike3i4i#h5i$h6i%h7i'h8ile9i!ime#i$ine%i

889  

890 cdef vector[cydriver.CUmemAccessDesc] access_descs 

891 cdef int peer_id 

892 cdef list peer_ids = [] 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

893  

894 if options is not None and options.peer_access is not None: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

895 for peer_dev in options.peer_access: 

896 peer_id = getattr(peer_dev, 'device_id', peer_dev) 

897 peer_ids.append(peer_id) 

898 access_descs.push_back(cydriver.CUmemAccessDesc_st( 

899 cydriver.CUmemLocation_st( 

900 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, 

901 peer_id 

902 ), 

903 cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

904 )) 

905  

906 cdef str memory_type = "device" 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

907 if options is not None and options.memory_type is not None: 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

908 memory_type = options.memory_type 2WjXjTk9h!h#h$h%h'h

909  

910 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

911 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

912 alloc_params.bytesize = size 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

913  

914 if memory_type == "device": 2WjXj3bTkSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

915 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

916 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

917 alloc_params.poolProps.location.id = device_id 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

918 elif memory_type == "host": 2Tk9h!h#h$h%h'h

919 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 

920 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST 

921 alloc_params.poolProps.location.id = 0 

922 elif memory_type == "managed": 2Tk9h!h#h$h%h'h

923 IF CUDA_CORE_BUILD_MAJOR >= 13: 

924 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 29h!h#h$h%h'h

925 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 29h!h#h$h%h'h

926 alloc_params.poolProps.location.id = device_id 29h!h#h$h%h'h

927 ELSE: 

928 raise ValueError("memory_type='managed' requires CUDA 13.0 or later") 

929 else: 

930 raise ValueError(f"Invalid memory_type: {memory_type!r}. " 2Tk

931 "Must be 'device', 'host', or 'managed'.") 

932  

933 if access_descs.size() > 0: 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

934 alloc_params.accessDescs = access_descs.data() 

935 alloc_params.accessDescCount = access_descs.size() 

936  

937 with nogil: 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

938 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2WjXj3bSksibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

939 &new_node, as_cu(h_graph), deps, num_deps, &alloc_params)) 

940  

941 self._succ_cache = None 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

942 return AllocNode._create_with_params( 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

943 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

944 device_id, memory_type, tuple(peer_ids)) 2WjXj3bsibj|hWiieqjOeXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_cZi!hQe?d@dCfncxb`c{c|c}c0ijesjRe1itj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd5i$hUe^d_dEfpczbddedfdgd6i%hVe`d{dFfqcAbhdidjdkd7i'hWe|d}dGfrcBbldmdndod8ilewjXe9ixj!imeyjYe#izj$ineAjZe%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

945  

946 def free(self, dptr: int) -> FreeNode: 

947 """Add a memory free node depending on this node. 

948  

949 Parameters 

950 ---------- 

951 dptr : int 

952 Device pointer to free (typically from AllocNode.dptr). 

953  

954 Returns 

955 ------- 

956 FreeNode 

957 A new FreeNode representing the free operation. 

958 """ 

959 cdef cydriver.CUgraphNode new_node = NULL 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

960 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

961 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

962 cdef cydriver.CUgraphNode* deps = NULL 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

963 cdef size_t num_deps = 0 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

964 cdef cydriver.CUdeviceptr c_dptr = <cydriver.CUdeviceptr>dptr 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

965  

966 if pred_node != NULL: 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

967 deps = &pred_node 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

968 num_deps = 1 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

969  

970 with nogil: 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

971 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGf:kbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

972 &new_node, as_cu(h_graph), deps, num_deps, c_dptr)) 

973  

974 self._succ_cache = None 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

975 return FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr) 23bfcPfQfRfSfk l m n `b{b|b}bBfCfDfEfFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

976  

977 def memset(self, dst: int, value, size_t width, size_t height=1, size_t pitch=0) -> MemsetNode: 

978 """Add a memset node depending on this node. 

979  

980 Parameters 

981 ---------- 

982 dst : int 

983 Destination device pointer. 

984 value : int or buffer-protocol object 

985 Fill value. int for 1-byte fill (range [0, 256)), 

986 or buffer-protocol object of 1, 2, or 4 bytes. 

987 width : int 

988 Width of the row in elements. 

989 height : int, optional 

990 Number of rows (default 1). 

991 pitch : int, optional 

992 Pitch of destination in bytes (default 0, unused if height is 1). 

993  

994 Returns 

995 ------- 

996 MemsetNode 

997 A new MemsetNode representing the memset operation. 

998 """ 

999 cdef unsigned int val 

1000 cdef unsigned int elem_size 

1001 val, elem_size = _parse_fill_value(value) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndod'iCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1002  

1003 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params 

1004 cdef cydriver.CUgraphNode new_node = NULL 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1005 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1006 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1007 cdef cydriver.CUgraphNode* deps = NULL 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1008 cdef size_t num_deps = 0 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1009  

1010 if pred_node != NULL: 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1011 deps = &pred_node 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1012 num_deps = 1 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1013  

1014 cdef cydriver.CUdeviceptr c_dst = <cydriver.CUdeviceptr>dst 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1015 cdef cydriver.CUcontext ctx = NULL 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1016 with nogil: 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1017 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1018  

1019 c_memset(&memset_params, 0, sizeof(memset_params)) 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1020 memset_params.dst = c_dst 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1021 memset_params.value = val 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1022 memset_params.elementSize = elem_size 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1023 memset_params.width = width 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1024 memset_params.height = height 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1025 memset_params.pitch = pitch 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1026  

1027 with nogil: 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1028 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1029 &new_node, as_cu(h_graph), deps, num_deps, 

1030 &memset_params, ctx)) 

1031  

1032 self._succ_cache = None 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1033 return MemsetNode._create_with_params( 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1034 create_graph_node_handle(new_node, h_graph), c_dst, 2k l m n `b{b|b}b[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1035 val, elem_size, width, height, pitch) 

1036  

1037 def memcpy(self, dst: int, src: int, size_t size) -> MemcpyNode: 

1038 """Add a memcpy node depending on this node. 

1039  

1040 Copies ``size`` bytes from ``src`` to ``dst``. Memory types are 

1041 auto-detected via the driver, so both device and pinned host 

1042 pointers are supported. 

1043  

1044 Parameters 

1045 ---------- 

1046 dst : int 

1047 Destination pointer (device or pinned host). 

1048 src : int 

1049 Source pointer (device or pinned host). 

1050 size : int 

1051 Number of bytes to copy. 

1052  

1053 Returns 

1054 ------- 

1055 MemcpyNode 

1056 A new MemcpyNode representing the copy operation. 

1057 """ 

1058 cdef cydriver.CUdeviceptr c_dst = <cydriver.CUdeviceptr>dst 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1059 cdef cydriver.CUdeviceptr c_src = <cydriver.CUdeviceptr>src 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1060  

1061 cdef unsigned int dst_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1062 cdef unsigned int src_mem_type = cydriver.CU_MEMORYTYPE_DEVICE 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1063 cdef cydriver.CUresult ret 

1064 with nogil: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1065 ret = cydriver.cuPointerGetAttribute( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1066 &dst_mem_type, 

1067 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

1068 c_dst) 

1069 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1070 HANDLE_RETURN(ret) 

1071 ret = cydriver.cuPointerGetAttribute( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1072 &src_mem_type, 

1073 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

1074 c_src) 

1075 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1076 HANDLE_RETURN(ret) 

1077  

1078 cdef cydriver.CUmemorytype c_dst_type = <cydriver.CUmemorytype>dst_mem_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1079 cdef cydriver.CUmemorytype c_src_type = <cydriver.CUmemorytype>src_mem_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1080  

1081 cdef cydriver.CUDA_MEMCPY3D params 

1082 c_memset(&params, 0, sizeof(params)) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1083  

1084 params.srcMemoryType = c_src_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1085 params.dstMemoryType = c_dst_type 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1086 if c_src_type == cydriver.CU_MEMORYTYPE_HOST: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1087 params.srcHost = <const void*><uintptr_t>c_src 

1088 else: 

1089 params.srcDevice = c_src 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1090 if c_dst_type == cydriver.CU_MEMORYTYPE_HOST: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1091 params.dstHost = <void*><uintptr_t>c_dst 

1092 else: 

1093 params.dstDevice = c_dst 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1094 params.WidthInBytes = size 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1095 params.Height = 1 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1096 params.Depth = 1 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1097  

1098 cdef cydriver.CUgraphNode new_node = NULL 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1099 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1100 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1101 cdef cydriver.CUgraphNode* deps = NULL 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1102 cdef size_t num_deps = 0 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1103  

1104 if pred_node != NULL: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1105 deps = &pred_node 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1106 num_deps = 1 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1107  

1108 cdef cydriver.CUcontext ctx = NULL 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1109 with nogil: 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1110 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1111 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1112 &new_node, as_cu(h_graph), deps, num_deps, &params, ctx)) 

1113  

1114 self._succ_cache = None 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1115 return MemcpyNode._create_with_params( 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1116 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2k l m n wbxbybzbAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1117 c_dst_type, c_src_type) 

1118  

1119 def embed(self, child: GraphDef) -> ChildGraphNode: 

1120 """Add a child graph node depending on this node. 

1121  

1122 Embeds a clone of the given graph definition as a sub-graph node. 

1123 The child graph must not contain allocation, free, or conditional 

1124 nodes. 

1125  

1126 Parameters 

1127 ---------- 

1128 child : GraphDef 

1129 The graph definition to embed (will be cloned). 

1130  

1131 Returns 

1132 ------- 

1133 ChildGraphNode 

1134 A new ChildGraphNode representing the embedded sub-graph. 

1135 """ 

1136 cdef GraphDef child_def = <GraphDef>child 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1137 cdef cydriver.CUgraphNode new_node = NULL 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1138 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1139 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1140 cdef cydriver.CUgraphNode* deps = NULL 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1141 cdef size_t num_deps = 0 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1142  

1143 if pred_node != NULL: 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1144 deps = &pred_node 

1145 num_deps = 1 

1146  

1147 with nogil: 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1148 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1149 &new_node, as_cu(h_graph), deps, num_deps, as_cu(child_def._h_graph))) 

1150  

1151 cdef cydriver.CUgraph embedded_graph = NULL 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1152 with nogil: 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1153 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1154 new_node, &embedded_graph)) 

1155  

1156 cdef GraphHandle h_embedded = create_graph_handle_ref(embedded_graph, h_graph) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1157  

1158 self._succ_cache = None 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1159 return ChildGraphNode._create_with_params( 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1160 create_graph_node_handle(new_node, h_graph), h_embedded) 2Bd9d!d#d$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1161  

1162 def record_event(self, event: Event) -> EventRecordNode: 

1163 """Add an event record node depending on this node. 

1164  

1165 Parameters 

1166 ---------- 

1167 event : Event 

1168 The event to record. 

1169  

1170 Returns 

1171 ------- 

1172 EventRecordNode 

1173 A new EventRecordNode representing the event record operation. 

1174 """ 

1175 cdef Event ev = <Event>event 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1176 cdef cydriver.CUgraphNode new_node = NULL 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1177 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1178 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1179 cdef cydriver.CUgraphNode* deps = NULL 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1180 cdef size_t num_deps = 0 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1181  

1182 if pred_node != NULL: 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1183 deps = &pred_node 2;d?d[d^d`d|dId4b

1184 num_deps = 1 2;d?d[d^d`d|dId4b

1185  

1186 with nogil: 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1187 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1188 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event))) 

1189  

1190 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1191 <cydriver.CUhostFn>_destroy_event_handle_copy) 

1192  

1193 self._succ_cache = None 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1194 return EventRecordNode._create_with_params( 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1195 create_graph_node_handle(new_node, h_graph), ev._h_event) 2.h;d?d[d^d`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1196  

1197 def wait_event(self, event: Event) -> EventWaitNode: 

1198 """Add an event wait node depending on this node. 

1199  

1200 Parameters 

1201 ---------- 

1202 event : Event 

1203 The event to wait for. 

1204  

1205 Returns 

1206 ------- 

1207 EventWaitNode 

1208 A new EventWaitNode representing the event wait operation. 

1209 """ 

1210 cdef Event ev = <Event>event 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1211 cdef cydriver.CUgraphNode new_node = NULL 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1212 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1213 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1214 cdef cydriver.CUgraphNode* deps = NULL 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1215 cdef size_t num_deps = 0 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1216  

1217 if pred_node != NULL: 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1218 deps = &pred_node 2.h=d@d]d_d{d}dJhzhJd

1219 num_deps = 1 2.h=d@d]d_d{d}dJhzhJd

1220  

1221 with nogil: 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1222 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1223 &new_node, as_cu(h_graph), deps, num_deps, as_cu(ev._h_event))) 

1224  

1225 _attach_user_object(as_cu(h_graph), <void*>new EventHandle(ev._h_event), 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1226 <cydriver.CUhostFn>_destroy_event_handle_copy) 

1227  

1228 self._succ_cache = None 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1229 return EventWaitNode._create_with_params( 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1230 create_graph_node_handle(new_node, h_graph), ev._h_event) 2.h=d@d]d_d{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1231  

1232 def callback(self, fn, *, user_data=None) -> HostCallbackNode: 

1233 """Add a host callback node depending on this node. 

1234  

1235 The callback runs on the host CPU when the graph reaches this node. 

1236 Two modes are supported: 

1237  

1238 - **Python callable**: Pass any callable. The GIL is acquired 

1239 automatically. The callable must take no arguments; use closures 

1240 or ``functools.partial`` to bind state. 

1241 - **ctypes function pointer**: Pass a ``ctypes.CFUNCTYPE`` instance. 

1242 The function receives a single ``void*`` argument (the 

1243 ``user_data``). The caller must keep the ctypes wrapper alive 

1244 for the lifetime of the graph. 

1245  

1246 .. warning:: 

1247  

1248 Callbacks must not call CUDA API functions. Doing so may 

1249 deadlock or corrupt driver state. 

1250  

1251 Parameters 

1252 ---------- 

1253 fn : callable or ctypes function pointer 

1254 The callback function. 

1255 user_data : int or bytes-like, optional 

1256 Only for ctypes function pointers. If ``int``, passed as a raw 

1257 pointer (caller manages lifetime). If bytes-like, the data is 

1258 copied and its lifetime is tied to the graph. 

1259  

1260 Returns 

1261 ------- 

1262 HostCallbackNode 

1263 A new HostCallbackNode representing the callback. 

1264 """ 

1265 import ctypes as ct 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1266  

1267 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

1268 cdef cydriver.CUgraphNode new_node = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1269 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1270 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1271 cdef cydriver.CUgraphNode* deps = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1272 cdef size_t num_deps = 0 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1273 cdef void* c_user_data = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1274 cdef object callable_obj = None 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1275 cdef void* fn_pyobj = NULL 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1276  

1277 if pred_node != NULL: 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1278 deps = &pred_node 

1279 num_deps = 1 

1280  

1281 if isinstance(fn, ct._CFuncPtr): 2[h;kIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1282 Py_INCREF(fn) 2[hIjdjfjhjjjljnjChmi

1283 fn_pyobj = <void*>fn 2[hIjdjfjhjjjljnjChmi

1284 _attach_user_object( 2[hIjdjfjhjjjljnjChmi

1285 as_cu(h_graph), fn_pyobj, 

1286 <cydriver.CUhostFn>_py_host_destructor) 

1287 node_params.fn = <cydriver.CUhostFn><uintptr_t>ct.cast( 2[hIjdjfjhjjjljnjChmi

1288 fn, ct.c_void_p).value 2[hIjdjfjhjjjljnjChmi

1289  

1290 if user_data is not None: 2[hIjdjfjhjjjljnjChmi

1291 if isinstance(user_data, int): 2[hCh

1292 c_user_data = <void*><uintptr_t>user_data 

1293 else: 

1294 buf = bytes(user_data) 2[hCh

1295 c_user_data = malloc(len(buf)) 2[hCh

1296 if c_user_data == NULL: 2[hCh

1297 raise MemoryError( 

1298 "failed to allocate user_data buffer") 

1299 c_memcpy(c_user_data, <const char*>buf, len(buf)) 2[hCh

1300 _attach_user_object( 2[hCh

1301 as_cu(h_graph), c_user_data, 

1302 <cydriver.CUhostFn>free) 

1303  

1304 node_params.userData = c_user_data 2[hIjdjfjhjjjljnjChmi

1305 else: 

1306 if user_data is not None: 2;kJjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1307 raise ValueError( 2;k

1308 "user_data is only supported with ctypes " 

1309 "function pointers") 

1310 callable_obj = fn 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1311 Py_INCREF(fn) 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1312 fn_pyobj = <void*>fn 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1313 node_params.fn = <cydriver.CUhostFn>_py_host_trampoline 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1314 node_params.userData = fn_pyobj 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1315 _attach_user_object( 2JjcjejgjijkjmjaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1316 as_cu(h_graph), fn_pyobj, 

1317 <cydriver.CUhostFn>_py_host_destructor) 

1318  

1319 with nogil: 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1320 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1321 &new_node, as_cu(h_graph), deps, num_deps, &node_params)) 

1322  

1323 self._succ_cache = None 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1324 return HostCallbackNode._create_with_params( 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1325 create_graph_node_handle(new_node, h_graph), callable_obj, 2[hIjJjcjdjejfjgjhjijjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1326 node_params.fn, node_params.userData) 

1327  

1328 def if_cond(self, condition: Condition) -> IfNode: 

1329 """Add an if-conditional node depending on this node. 

1330  

1331 The body graph executes only when the condition evaluates to 

1332 a non-zero value at runtime. 

1333  

1334 Parameters 

1335 ---------- 

1336 condition : Condition 

1337 Condition from :meth:`GraphDef.create_condition`. 

1338  

1339 Returns 

1340 ------- 

1341 IfNode 

1342 A new IfNode with one branch accessible via ``.then``. 

1343 """ 

1344 return _make_conditional_node( 2Zc@g_g}gchghkhUjqfX *e?f]b^f1 8f|fbg' fgOcSc_ $f/bLfMfNfjgZbngh J rgvgzgDg!bHgR WfLgPg6 Tgvczc+ 0f6b8e9e!eXgRb1gd C 5guf9g/gyf%g*g.e=ephth

1345 self, condition, 

1346 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2Zc@g_g}gchghkhUjqfX *e?f]b^f1 8f|fbg' fgOcSc_ $f/bLfMfNfjgZbngh J rgvgzgDg!bHgR WfLgPg6 Tgvczc+ 0f6b8e9e!eXgRb1gd C 5guf9g/gyf%g*g.e=ephth

1347  

1348 def if_else(self, condition: Condition) -> IfElseNode: 

1349 """Add an if-else conditional node depending on this node. 

1350  

1351 Two body graphs: the first executes when the condition is 

1352 non-zero, the second when it is zero. 

1353  

1354 Parameters 

1355 ---------- 

1356 condition : Condition 

1357 Condition from :meth:`GraphDef.create_condition`. 

1358  

1359 Returns 

1360 ------- 

1361 IfElseNode 

1362 A new IfElseNode with branches accessible via 

1363 ``.then`` and ``.else_``. 

1364 """ 

1365 return _make_conditional_node( 2[g`g~gdhhhlhnfV )e=f[b]f0 7f{fag% egNcRc^ #f.bJfKfLfigYbmgg I qgugygCg9bGgQ VfKgOg5 Sgucyc* Zf5b6e7e8eWgQb0gc B 4gtf8g.gxf$g)g-e;eohsh

1366 self, condition, 

1367 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2[g`g~gdhhhlhnfV )e=f[b]f0 7f{fag% egNcRc^ #f.bJfKfLfigYbmgg I qgugygCg9bGgQ VfKgOg5 Sgucyc* Zf5b6e7e8eWgQb0gc B 4gtf8g.gxf$g)g-e;eohsh

1368  

1369 def while_loop(self, condition: Condition) -> WhileNode: 

1370 """Add a while-loop conditional node depending on this node. 

1371  

1372 The body graph executes repeatedly while the condition 

1373 evaluates to a non-zero value. 

1374  

1375 Parameters 

1376 ---------- 

1377 condition : Condition 

1378 Condition from :meth:`GraphDef.create_condition`. 

1379  

1380 Returns 

1381 ------- 

1382 WhileNode 

1383 A new WhileNode with body accessible via ``.body``. 

1384 """ 

1385 return _make_conditional_node( 2^g|gbhfhjhnhsfZ Lc,e[f_b`f3 !f~fdg) hgQcUc{ 'f;bKfNflg1bpgj L tgxgBgOfFg$bJgT YfNgRg8 VgxcBc- 2f8b7e!eZgTb3gf E 7gwf#g#e:gAf(g,g:e@erhvh

1386 self, condition, 

1387 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2^g|gbhfhjhnhsfZ Lc,e[f_b`f3 !f~fdg) hgQcUc{ 'f;bKfNflg1bpgj L tgxgBgOfFg$bJgT YfNgRg8 VgxcBc- 2f8b7e!eZgTb3gf E 7gwf#g#e:gAf(g,g:e@erhvh

1388  

1389 def switch(self, condition: Condition, unsigned int count) -> SwitchNode: 

1390 """Add a switch conditional node depending on this node. 

1391  

1392 The condition value selects which branch to execute. If the 

1393 value is out of range, no branch executes. 

1394  

1395 Parameters 

1396 ---------- 

1397 condition : Condition 

1398 Condition from :meth:`GraphDef.create_condition`. 

1399 count : int 

1400 Number of switch cases (branches). 

1401  

1402 Returns 

1403 ------- 

1404 SwitchNode 

1405 A new SwitchNode with branches accessible via ``.branches``. 

1406 """ 

1407 return _make_conditional_node( 2]g{gahehihmhVjrfY +e@f^b_f2 9f}fcg( ggPcTc` %f:bJfMfkg0bogi K sgwgAgOfEg#bIgS XfMgQg7 UgwcAc, 1f7b6e9eYgSb2ge D 6gvf!g#e(fzf'g+g/e?eqhuh

1408 self, condition, 

1409 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2]g{gahehihmhVjrfY +e@f^b_f2 9f}fcg( ggPcTc` %f:bJfMfkg0bogi K sgwgAgOfEg#bIgS XfMgQg7 UgwcAc, 1f7b6e9eYgSb2ge D 6gvf!g#e(fzf'g+g/e?eqhuh

1410  

1411  

1412# ============================================================================= 

1413# GraphNode subclasses 

1414# ============================================================================= 

1415  

1416  

1417cdef class EmptyNode(GraphNode): 

1418 """A synchronization / join node with no operation.""" 

1419  

1420 @staticmethod 

1421 cdef EmptyNode _create_impl(GraphNodeHandle h_node): 

1422 cdef EmptyNode n = EmptyNode.__new__(EmptyNode) 2kiieliOek l m n %b'b(bPewbQepfxb$jje%jRekeSeTeybNjUe3fzb4fVe.fAbWeBbEjleFjXemeYe-hneMkZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

1423 n._h_node = h_node 2kiieliOek l m n %b'b(bPewbQepfxb$jje%jRekeSeTeybNjUe3fzb4fVe.fAbWeBbEjleFjXemeYe-hneMkZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

1424 return n 2kiieliOek l m n %b'b(bPewbQepfxb$jje%jRekeSeTeybNjUe3fzb4fVe.fAbWeBbEjleFjXemeYe-hneMkZe3j2bFd9 oe| } pe~ 1cU qeabrebbseG acbcHcOb% ' ubcbVb( ) tedbM fe] ueebp vefbb y z s g h i j u wegbxehbyeibzejb. BekbXcP CelbDemb6dA +b,bicHb5 6 = / Kb7 8 EenbF ce? Feobo Gepba w x q c d e f r Heqb7d: Jerb-b@ 8d; LesbMetbGd! Hd# 1eCb2eDb

1425  

1426 def __repr__(self) -> str: 

1427 cdef Py_ssize_t n = len(self.pred) 2-b

1428 return f"<EmptyNode with {n} {'pred' if n == 1 else 'preds'}>" 2-b

1429  

1430  

1431cdef class KernelNode(GraphNode): 

1432 """A kernel launch node. 

1433  

1434 Properties 

1435 ---------- 

1436 grid : tuple of int 

1437 Grid dimensions (gridDimX, gridDimY, gridDimZ). 

1438 block : tuple of int 

1439 Block dimensions (blockDimX, blockDimY, blockDimZ). 

1440 shmem_size : int 

1441 Dynamic shared memory size in bytes. 

1442 kernel : Kernel 

1443 The kernel object for this launch node. 

1444 config : LaunchConfig 

1445 A LaunchConfig reconstructed from this node's parameters. 

1446 """ 

1447  

1448 @staticmethod 

1449 cdef KernelNode _create_with_params(GraphNodeHandle h_node, 

1450 tuple grid, tuple block, unsigned int shmem_size, 

1451 KernelHandle h_kernel): 

1452 """Create from known params (called by launch() builder).""" 

1453 cdef KernelNode n = KernelNode.__new__(KernelNode) 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

1454 n._h_node = h_node 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

1455 n._grid = grid 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

1456 n._block = block 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

1457 n._shmem_size = shmem_size 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

1458 n._h_kernel = h_kernel 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

1459 return n 2Bd]h^h_h`h{h0cAiHk9dmc!d)fnc#doc$dEhpc%d,dqc'drcyhX V Y Z )bBh4b+hxhLb=c/fKdLhEbjcLdMhgchcUb0 1 2 3 Fc5eMdNhNdOhG ubOdPhN CdDhPdRhQd~daeIbWcYbZbp W 0b1bRdShb v SdThTdUhUdVhVdWh[ ccWdXh=b?bJbQ R S T tcNeXdYhYdZhA = Zd0hH zdAh0d1hsdDdEdvbGcQbRbo O SbTb1d2ha t 2d3htd=g3d4hud,hvd?g4d5h5d6h?c:f@c;f*d;h+d=h

1460  

1461 @staticmethod 

1462 cdef KernelNode _create_from_driver(GraphNodeHandle h_node): 

1463 """Create by fetching params from the driver (called by _create factory).""" 

1464 cdef cydriver.CUgraphNode node = as_cu(h_node) 20cHk)fEh,dX V Y Z )b4bLb

1465 cdef cydriver.CUDA_KERNEL_NODE_PARAMS params 

1466 with nogil: 20cHk)fEh,dX V Y Z )b4bLb

1467 HANDLE_RETURN(cydriver.cuGraphKernelNodeGetParams(node, &params)) 20cHk)fEh,dX V Y Z )b4bLb

1468 cdef KernelHandle h_kernel = create_kernel_handle_ref(params.kern) 20cHk)fEh,dX V Y Z )b4bLb

1469 return KernelNode._create_with_params( 20cHk)fEh,dX V Y Z )b4bLb

1470 h_node, 

1471 (params.gridDimX, params.gridDimY, params.gridDimZ), 20cHk)fEh,dX V Y Z )b4bLb

1472 (params.blockDimX, params.blockDimY, params.blockDimZ), 20cHk)fEh,dX V Y Z )b4bLb

1473 params.sharedMemBytes, 

1474 h_kernel) 

1475  

1476 def __repr__(self) -> str: 

1477 return (f"<KernelNode grid={self._grid} block={self._block}>") 2,h

1478  

1479 @property 

1480 def grid(self) -> tuple: 

1481 """Grid dimensions as a 3-tuple (gridDimX, gridDimY, gridDimZ).""" 

1482 return self._grid 26l)f

1483  

1484 @property 

1485 def block(self) -> tuple: 

1486 """Block dimensions as a 3-tuple (blockDimX, blockDimY, blockDimZ).""" 

1487 return self._block 26l)f

1488  

1489 @property 

1490 def shmem_size(self) -> int: 

1491 """Dynamic shared memory size in bytes.""" 

1492 return self._shmem_size 26l)f

1493  

1494 @property 

1495 def kernel(self) -> Kernel: 

1496 """The Kernel object for this launch node.""" 

1497 return Kernel._from_handle(self._h_kernel) 26l)fBh4b

1498  

1499 @property 

1500 def config(self) -> LaunchConfig: 

1501 """A LaunchConfig reconstructed from this node's grid, block, and shmem_size. 

1502  

1503 Note: cluster dimensions and cooperative_launch are not preserved 

1504 by the CUDA driver's kernel node params, so they are not included. 

1505 """ 

1506 return LaunchConfig(grid=self._grid, block=self._block, 26l)f

1507 shmem_size=self._shmem_size) 26l)f

1508  

1509  

1510cdef class AllocNode(GraphNode): 

1511 """A memory allocation node. 

1512  

1513 Properties 

1514 ---------- 

1515 dptr : int 

1516 The device pointer for the allocation. 

1517 bytesize : int 

1518 The number of bytes allocated. 

1519 device_id : int 

1520 The device on which the allocation was made. 

1521 memory_type : str 

1522 The type of memory allocated (``"device"``, ``"host"``, or ``"managed"``). 

1523 peer_access : tuple of int 

1524 Device IDs that have read-write access to this allocation. 

1525 options : GraphAllocOptions 

1526 A GraphAllocOptions reconstructed from this node's parameters. 

1527 """ 

1528  

1529 @staticmethod 

1530 cdef AllocNode _create_with_params(GraphNodeHandle h_node, 

1531 cydriver.CUdeviceptr dptr, size_t bytesize, 

1532 int device_id, str memory_type, tuple peer_access): 

1533 """Create from known params (called by alloc() builder).""" 

1534 cdef AllocNode n = AllocNode.__new__(AllocNode) 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1535 n._h_node = h_node 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1536 n._dptr = dptr 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1537 n._bytesize = bytesize 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1538 n._device_id = device_id 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1539 n._memory_type = memory_type 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1540 n._peer_access = peer_access 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1541 return n 2WjXj3bsibj|hGjWikiieqjliOeHjXirjfcPfQfRfSfk l m n `b{b|b}bKjLjMj%b'b(bYi9hPe;d=dBfmcwb[c]c^c_c~iZigi!hQe}h?d~h@dhiCf)fncpfxb*f`c+f{c,f|c-f}cIk0i$jjeJksj%jReKk1iLktj2ikeujSe3ivj4i#hTe[d]dDfocyb~cadbdcd8j5iYj$hNjUeii^dji_dtiEfEhpc3fzbFhddGhedHhfdIhgdwh6i-g%h4fVe3e`d4e{d%eFf,dqcAb-dhd.did/djd:dkd7i'hWe|d}dGfrcBbldmdndodZj8iEjle0jwjFjXe1j9i2jxjui!ivimeyjwiYexi#izjyi$i-hneAjZezi%iBj2b'ieiIdJd(hFdbe9 Cc(ioe[e| 2cEb(d)d]eMc[b]bjc} 3c^b_b)ipe^e~ 4c6f1cwdU ~b*iqe_eab5c+ire`ebb6cseG acbcHcOb% ' ubcbVb( ) ,ite{edb7cN kclcXb^ _ M *b` { rife$e] Yc-iue|eeb8cIbp W .ive}efb9cb y z s g h i j v MbNb$ I J u K L /iwe~egb!c:ixeafhb#c;iyebfib$c=izecfjb%c[ xdydAesc9b!bcc. Ic#b$b?iBedfkb'cUfXcrdP @b@iCeeflb(c[iDeffmb)c6dA +b,bicHb5 6 = / Kb7 8 ]iEegfnb*cH dcecPb* + F Wb, - fice0e? Vc^iFehfob+cvbo O _iGeifpb,ca w x q c d e f t FbGb4 B C r D E `iHejfqb-c?h7dIe: Jc{iJekfrb.caj-bof@ /c@h8dKe; Kc|iLelfsb:c}iMemftb;c)hGdde! Dc*hHdee# EcCj1eHfCbpdDj2eIfDbqd

1542  

1543 @staticmethod 

1544 cdef AllocNode _create_from_driver(GraphNodeHandle h_node): 

1545 """Create by fetching params from the driver (called by _create factory).""" 

1546 cdef cydriver.CUgraphNode node = as_cu(h_node) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1547 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS params 

1548 with nogil: 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1549 HANDLE_RETURN(cydriver.cuGraphMemAllocNodeGetParams(node, &params)) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1550  

1551 cdef str memory_type 

1552 if params.poolProps.allocType == cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED: 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1553 if params.poolProps.location.type == cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST: 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1554 memory_type = "host" 

1555 else: 

1556 memory_type = "device" 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1557 else: 

1558 IF CUDA_CORE_BUILD_MAJOR >= 13: 

1559 if params.poolProps.allocType == cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED: 2giYj-g

1560 memory_type = "managed" 2giYj-g

1561 else: 

1562 memory_type = "device" 

1563 ELSE: 

1564 memory_type = "device" 

1565  

1566 cdef list peer_ids = [] 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1567 cdef size_t i 

1568 for i in range(params.accessDescCount): 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1569 peer_ids.append(<int>params.accessDescs[i].location.id) 

1570  

1571 return AllocNode._create_with_params( 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1572 h_node, params.dptr, params.bytesize, 

1573 <int>params.poolProps.location.id, memory_type, tuple(peer_ids)) 23bGjkiliHjfc%b'b(b~igi}h~hhi)fpf*f+f,f-fIk$jJk%jKkLk8jYjNjiijitiEh3fFhGhHhIhwh-g4f3e4e%e,d-d.d/d:dZjEj0jFj1j2juiviwixiyi-hzi2b-b

1574  

1575 def __repr__(self) -> str: 

1576 return f"<AllocNode dptr=0x{self._dptr:x} size={self._bytesize}>" 2aj

1577  

1578 @property 

1579 def dptr(self) -> int: 

1580 """The device pointer for the allocation.""" 

1581 return self._dptr 2WjXj3bfcPfQfRfSfk l m n `b{b|b}bIlJlBfwb[c]c^c_c~igiCfxb`c{c|c}cDfyb~cadbdcdEfzbddedfdgdFfAbhdidjdkdGfBbldmdndod'ibe9 Cc[e| 2c]e} 3c^e~ 4cwdU ~b_eab5c`ebb6cHccbVb{edb7cN kclcXb^ _ M *b` { $e] Yc|eeb8cIbp W }efb9cb y z s g h i j v MbNb$ I J u K L ~egb!cafhb#cbfib$ccfjb%cAe. Icdfkb'crdP @beflb(cffmb)cic/ Kbgfnb*cH dcecPb* + F Wb, - 0e? Vchfob+cvbo O ifpb,ca w x q c d e f t FbGb4 B C r D E jfqb-cIe: Jckfrb.cof@ /cKe; Kclfsb:cmftb;cde! Dcee# EcHfCbpdIfDbqd

1582  

1583 @property 

1584 def bytesize(self) -> int: 

1585 """The number of bytes allocated.""" 

1586 return self._bytesize 2IlJl~igi

1587  

1588 @property 

1589 def device_id(self) -> int: 

1590 """The device on which the allocation was made.""" 

1591 return self._device_id 2IlJl~igi

1592  

1593 @property 

1594 def memory_type(self) -> str: 

1595 """The type of memory: ``"device"``, ``"host"``, or ``"managed"``.""" 

1596 return self._memory_type 2IlJl~igi

1597  

1598 @property 

1599 def peer_access(self) -> tuple: 

1600 """Device IDs with read-write access to this allocation.""" 

1601 return self._peer_access 2IlJl~igi

1602  

1603 @property 

1604 def options(self) -> GraphAllocOptions: 

1605 """A GraphAllocOptions reconstructed from this node's parameters.""" 

1606 return GraphAllocOptions( 2IlJl~igi

1607 device=self._device_id, 2IlJl~igi

1608 memory_type=self._memory_type, 

1609 peer_access=list(self._peer_access) if self._peer_access else None, 2IlJl~igi

1610 ) 

1611  

1612  

1613cdef class FreeNode(GraphNode): 

1614 """A memory free node. 

1615  

1616 Properties 

1617 ---------- 

1618 dptr : int 

1619 The device pointer being freed. 

1620 """ 

1621  

1622 @staticmethod 

1623 cdef FreeNode _create_with_params(GraphNodeHandle h_node, 

1624 cydriver.CUdeviceptr dptr): 

1625 """Create from known params (called by free() builder).""" 

1626 cdef FreeNode n = FreeNode.__new__(FreeNode) 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

1627 n._h_node = h_node 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

1628 n._dptr = dptr 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

1629 return n 23bfcPfQfRfSfk l m n `b{b|b}bBfhiCfDftiEf%eFfGfbe[e]e^ewd_e`eHc{eN kclcXb^ _ M *b` { $e|eIb}e~eafbfcfAedfrdeffficgfH dcecPb* + F Wb, - 0ehfvbifjfIekfofKelfmfdeeeHfIf

1630  

1631 @staticmethod 

1632 cdef FreeNode _create_from_driver(GraphNodeHandle h_node): 

1633 """Create by fetching params from the driver (called by _create factory).""" 

1634 cdef cydriver.CUgraphNode node = as_cu(h_node) 23bhiti%e

1635 cdef cydriver.CUdeviceptr dptr 

1636 with nogil: 23bhiti%e

1637 HANDLE_RETURN(cydriver.cuGraphMemFreeNodeGetParams(node, &dptr)) 23bhiti%e

1638 return FreeNode._create_with_params(h_node, dptr) 23bhiti%e

1639  

1640 def __repr__(self) -> str: 

1641 return f"<FreeNode dptr=0x{self._dptr:x}>" 2of

1642  

1643 @property 

1644 def dptr(self) -> int: 

1645 """The device pointer being freed.""" 

1646 return self._dptr 2Lqhi

1647  

1648  

1649cdef class MemsetNode(GraphNode): 

1650 """A memory set node. 

1651  

1652 Properties 

1653 ---------- 

1654 dptr : int 

1655 The destination device pointer. 

1656 value : int 

1657 The fill value. 

1658 element_size : int 

1659 Element size in bytes (1, 2, or 4). 

1660 width : int 

1661 Width of the row in elements. 

1662 height : int 

1663 Number of rows. 

1664 pitch : int 

1665 Pitch in bytes (unused if height is 1). 

1666 """ 

1667  

1668 @staticmethod 

1669 cdef MemsetNode _create_with_params(GraphNodeHandle h_node, 

1670 cydriver.CUdeviceptr dptr, unsigned int value, 

1671 unsigned int element_size, size_t width, 

1672 size_t height, size_t pitch): 

1673 """Create from known params (called by memset() builder).""" 

1674 cdef MemsetNode n = MemsetNode.__new__(MemsetNode) 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1675 n._h_node = h_node 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1676 n._dptr = dptr 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1677 n._value = value 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1678 n._element_size = element_size 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1679 n._width = width 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1680 n._height = height 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1681 n._pitch = pitch 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1682 return n 2k l m n `b{b|b}b[c]c^c_c*f`c+f{c,f|c-f}c~cadbdcdFhddGhedHhfdIhgd-dhd.did/djd:dkdldmdndodCc2c3c4c~b5c6cVb7c*bYc8cW 9cv MbNb$ I J u K L !c#c$c%cIc'c@b(c)cKb*cWbVc+cO ,ct FbGb4 B C r D E -cJc.c/cKc:c;cDcEcpdqd

1683  

1684 @staticmethod 

1685 cdef MemsetNode _create_from_driver(GraphNodeHandle h_node): 

1686 """Create by fetching params from the driver (called by _create factory).""" 

1687 cdef cydriver.CUgraphNode node = as_cu(h_node) 2*f+f,f-fFhGhHhIh-d.d/d:d

1688 cdef cydriver.CUDA_MEMSET_NODE_PARAMS params 

1689 with nogil: 2*f+f,f-fFhGhHhIh-d.d/d:d

1690 HANDLE_RETURN(cydriver.cuGraphMemsetNodeGetParams(node, &params)) 2*f+f,f-fFhGhHhIh-d.d/d:d

1691 return MemsetNode._create_with_params( 2*f+f,f-fFhGhHhIh-d.d/d:d

1692 h_node, params.dst, params.value, 

1693 params.elementSize, params.width, params.height, params.pitch) 2*f+f,f-fFhGhHhIh-d.d/d:d

1694  

1695 def __repr__(self) -> str: 

1696 return (f"<MemsetNode dptr=0x{self._dptr:x} " 2/c

1697 f"value={self._value} elem={self._element_size}>") 2/c

1698  

1699 @property 

1700 def dptr(self) -> int: 

1701 """The destination device pointer.""" 

1702 return self._dptr 27l8l9l!l*f+f,f-f

1703  

1704 @property 

1705 def value(self) -> int: 

1706 """The fill value.""" 

1707 return self._value 27l8l9l!l*f+f,f-f

1708  

1709 @property 

1710 def element_size(self) -> int: 

1711 """Element size in bytes (1, 2, or 4).""" 

1712 return self._element_size 27l8l9l!l*f+f,f-f

1713  

1714 @property 

1715 def width(self) -> int: 

1716 """Width of the row in elements.""" 

1717 return self._width 27l8l9l!l*f+f,f-f

1718  

1719 @property 

1720 def height(self) -> int: 

1721 """Number of rows.""" 

1722 return self._height 27l8l9l!l*f+f,f-f

1723  

1724 @property 

1725 def pitch(self) -> int: 

1726 """Pitch in bytes (unused if height is 1).""" 

1727 return self._pitch 27l8l9l!l*f+f,f-f

1728  

1729  

1730cdef class MemcpyNode(GraphNode): 

1731 """A memory copy node. 

1732  

1733 Properties 

1734 ---------- 

1735 dst : int 

1736 The destination pointer. 

1737 src : int 

1738 The source pointer. 

1739 size : int 

1740 The number of bytes copied. 

1741 """ 

1742  

1743 @staticmethod 

1744 cdef MemcpyNode _create_with_params(GraphNodeHandle h_node, 

1745 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, 

1746 size_t size, cydriver.CUmemorytype dst_type, 

1747 cydriver.CUmemorytype src_type): 

1748 """Create from known params (called by memcpy() builder).""" 

1749 cdef MemcpyNode n = MemcpyNode.__new__(MemcpyNode) 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1750 n._h_node = h_node 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1751 n._dst = dst 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1752 n._src = src 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1753 n._size = size 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1754 n._dst_type = dst_type 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1755 n._src_type = src_type 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1756 return n 2k l m n wbpfxbyb3fzb.fAbBb9 | } ~ U abbbcbdbM ] ebp fbb y z s g h i j u gbhbibjb. kbP lbmb/ nbF ? obo pba w x q c d e f r qb: rb@ ; sbtb! # CbDb

1757  

1758 @staticmethod 

1759 cdef MemcpyNode _create_from_driver(GraphNodeHandle h_node): 

1760 """Create by fetching params from the driver (called by _create factory).""" 

1761 cdef cydriver.CUgraphNode node = as_cu(h_node) 2pf3f.f

1762 cdef cydriver.CUDA_MEMCPY3D params 

1763 with nogil: 2pf3f.f

1764 HANDLE_RETURN(cydriver.cuGraphMemcpyNodeGetParams(node, &params)) 2pf3f.f

1765  

1766 cdef cydriver.CUdeviceptr dst 

1767 cdef cydriver.CUdeviceptr src 

1768 if params.dstMemoryType == cydriver.CU_MEMORYTYPE_HOST: 2pf3f.f

1769 dst = <cydriver.CUdeviceptr><uintptr_t>params.dstHost 

1770 else: 

1771 dst = params.dstDevice 2pf3f.f

1772 if params.srcMemoryType == cydriver.CU_MEMORYTYPE_HOST: 2pf3f.f

1773 src = <cydriver.CUdeviceptr><uintptr_t>params.srcHost 

1774 else: 

1775 src = params.srcDevice 2pf3f.f

1776  

1777 return MemcpyNode._create_with_params( 2pf3f.f

1778 h_node, dst, src, params.WidthInBytes, 

1779 params.dstMemoryType, params.srcMemoryType) 2pf3f.f

1780  

1781 def __repr__(self) -> str: 

1782 cdef str dt = "H" if self._dst_type == cydriver.CU_MEMORYTYPE_HOST else "D" 1@

1783 cdef str st = "H" if self._src_type == cydriver.CU_MEMORYTYPE_HOST else "D" 1@

1784 return (f"<MemcpyNode dst=0x{self._dst:x}({dt}) " 1@

1785 f"src=0x{self._src:x}({st}) size={self._size}>") 1@

1786  

1787 @property 

1788 def dst(self) -> int: 

1789 """The destination pointer.""" 

1790 return self._dst 2{mpf

1791  

1792 @property 

1793 def src(self) -> int: 

1794 """The source pointer.""" 

1795 return self._src 2{mpf

1796  

1797 @property 

1798 def size(self) -> int: 

1799 """The number of bytes copied.""" 

1800 return self._size 2{mpf

1801  

1802  

1803cdef class ChildGraphNode(GraphNode): 

1804 """A child graph (sub-graph) node. 

1805  

1806 Properties 

1807 ---------- 

1808 child_graph : GraphDef 

1809 The embedded graph definition (non-owning wrapper). 

1810 """ 

1811  

1812 @staticmethod 

1813 cdef ChildGraphNode _create_with_params(GraphNodeHandle h_node, 

1814 GraphHandle h_child_graph): 

1815 """Create from known params (called by embed() builder).""" 

1816 cdef ChildGraphNode n = ChildGraphNode.__new__(ChildGraphNode) 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1817 n._h_node = h_node 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1818 n._h_child_graph = h_child_graph 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1819 return n 2Bd9d9j!d#dNk$d%d'd)bLb=cKdEbLdgchcUb0 1 2 3 FcMdNdG OdN CdPdQdRdb v SdTdUdVd[ Wd=b?bJbQ R S T tcXdYdA ZdH zd0dsd1da t 2dtd3dudvd4d5d?c@c*d+d

1820  

1821 @staticmethod 

1822 cdef ChildGraphNode _create_from_driver(GraphNodeHandle h_node): 

1823 """Create by fetching params from the driver (called by _create factory).""" 

1824 cdef cydriver.CUgraphNode node = as_cu(h_node) 29jNkLb

1825 cdef cydriver.CUgraph child_graph = NULL 29jNkLb

1826 with nogil: 29jNkLb

1827 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph(node, &child_graph)) 29jNkLb

1828 cdef GraphHandle h_graph = graph_node_get_graph(h_node) 29jNkLb

1829 cdef GraphHandle h_child = create_graph_handle_ref(child_graph, h_graph) 29jNkLb

1830 return ChildGraphNode._create_with_params(h_node, h_child) 29jNkLb

1831  

1832 def __repr__(self) -> str: 

1833 cdef cydriver.CUgraph g = as_cu(self._h_child_graph) 2ud

1834 cdef size_t num_nodes = 0 2ud

1835 with nogil: 2ud

1836 HANDLE_RETURN(cydriver.cuGraphGetNodes(g, NULL, &num_nodes)) 2ud

1837 cdef Py_ssize_t n = <Py_ssize_t>num_nodes 2ud

1838 return f"<ChildGraphNode with {n} {'subnode' if n == 1 else 'subnodes'}>" 2ud

1839  

1840 @property 

1841 def child_graph(self) -> GraphDef: 

1842 """The embedded graph definition (non-owning wrapper).""" 

1843 return GraphDef._from_handle(self._h_child_graph) 2Hk9j)bLb

1844  

1845  

1846cdef class EventRecordNode(GraphNode): 

1847 """An event record node. 

1848  

1849 Properties 

1850 ---------- 

1851 event : Event 

1852 The event being recorded. 

1853 """ 

1854  

1855 @staticmethod 

1856 cdef EventRecordNode _create_with_params(GraphNodeHandle h_node, 

1857 EventHandle h_event): 

1858 """Create from known params (called by record_event() builder).""" 

1859 cdef EventRecordNode n = EventRecordNode.__new__(EventRecordNode) 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1860 n._h_node = h_node 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1861 n._h_event = h_event 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1862 return n 2.h;d}h?d[dii^d3e`d|d'jId(jJhzh4bOj-j(d/jgcni;j?jac[jQh'eNcOcPcQckc*j^j~d`jy Mb|j~jbkdkxdfk=bbihkjk+blk;ggeucvcwcxcdc!jnkDdpkw Fbrk4jtkAk6jvkxkQjSjDkFk

1863  

1864 @staticmethod 

1865 cdef EventRecordNode _create_from_driver(GraphNodeHandle h_node): 

1866 """Create by fetching params from the driver (called by _create factory).""" 

1867 cdef cydriver.CUgraphNode node = as_cu(h_node) 2}hii3e

1868 cdef cydriver.CUevent event 

1869 with nogil: 2}hii3e

1870 HANDLE_RETURN(cydriver.cuGraphEventRecordNodeGetEvent(node, &event)) 2}hii3e

1871 cdef EventHandle h_event = create_event_handle_ref(event) 2}hii3e

1872 return EventRecordNode._create_with_params(h_node, h_event) 2}hii3e

1873  

1874 def __repr__(self) -> str: 

1875 return f"<EventRecordNode event=0x{as_intptr(self._h_event):x}>" 2Ak

1876  

1877 @property 

1878 def event(self) -> Event: 

1879 """The event being recorded.""" 

1880 return Event._from_handle(self._h_event) 2Mq}h'jId(j

1881  

1882  

1883cdef class EventWaitNode(GraphNode): 

1884 """An event wait node. 

1885  

1886 Properties 

1887 ---------- 

1888 event : Event 

1889 The event being waited on. 

1890 """ 

1891  

1892 @staticmethod 

1893 cdef EventWaitNode _create_with_params(GraphNodeHandle h_node, 

1894 EventHandle h_event): 

1895 """Create from known params (called by wait_event() builder).""" 

1896 cdef EventWaitNode n = EventWaitNode.__new__(EventWaitNode) 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1897 n._h_node = h_node 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1898 n._h_event = h_event 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1899 return n 2.h=d~h@d]dji_d4e{d}dJhzhJd)jPj.j)d:jhcoi=j@jbc]jQh(eRcScTcUclc+j_jae{jz Nb}jakckekydgk?bciikkk,bmk;gheyczcAcBcec#jokEdqkx Gbsk5jukBk7jwkykRjTjEkGk

1900  

1901 @staticmethod 

1902 cdef EventWaitNode _create_from_driver(GraphNodeHandle h_node): 

1903 """Create by fetching params from the driver (called by _create factory).""" 

1904 cdef cydriver.CUgraphNode node = as_cu(h_node) 2~hji4e

1905 cdef cydriver.CUevent event 

1906 with nogil: 2~hji4e

1907 HANDLE_RETURN(cydriver.cuGraphEventWaitNodeGetEvent(node, &event)) 2~hji4e

1908 cdef EventHandle h_event = create_event_handle_ref(event) 2~hji4e

1909 return EventWaitNode._create_with_params(h_node, h_event) 2~hji4e

1910  

1911 def __repr__(self) -> str: 

1912 return f"<EventWaitNode event=0x{as_intptr(self._h_event):x}>" 2Bk

1913  

1914 @property 

1915 def event(self) -> Event: 

1916 """The event being waited on.""" 

1917 return Event._from_handle(self._h_event) 2Nq~hJd)j

1918  

1919  

1920cdef class HostCallbackNode(GraphNode): 

1921 """A host callback node. 

1922  

1923 Properties 

1924 ---------- 

1925 callback_fn : callable or None 

1926 The Python callable (None for ctypes function pointer callbacks). 

1927 """ 

1928  

1929 @staticmethod 

1930 cdef HostCallbackNode _create_with_params(GraphNodeHandle h_node, 

1931 object callable_obj, cydriver.CUhostFn fn, 

1932 void* user_data): 

1933 """Create from known params (called by callback() builder).""" 

1934 cdef HostCallbackNode n = HostCallbackNode.__new__(HostCallbackNode) 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1935 n._h_node = h_node 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1936 n._callable = callable_obj 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1937 n._fn = fn 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1938 n._user_data = user_data 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1939 return n 2[hIjJjcjdj,jejfjgjhjzkijCkjjkjljmjnjChmiaiKhBiMcCiUb5fDiEiObFi'e(eXbpi.b/b:b;bGiWcHis $ IiJiKiLiscMiJbTfNiOiHbPigehePbdi5b6b7b8bQiGcRiq 4 Si/hTiqi:hUiVi7h8hojpj

1940  

1941 @staticmethod 

1942 cdef HostCallbackNode _create_from_driver(GraphNodeHandle h_node): 

1943 """Create by fetching params from the driver (called by _create factory).""" 

1944 cdef cydriver.CUgraphNode node = as_cu(h_node) 2,jzkCk

1945 cdef cydriver.CUDA_HOST_NODE_PARAMS params 

1946 with nogil: 2,jzkCk

1947 HANDLE_RETURN(cydriver.cuGraphHostNodeGetParams(node, &params)) 2,jzkCk

1948  

1949 cdef object callable_obj = None 2,jzkCk

1950 if params.fn == <cydriver.CUhostFn>_py_host_trampoline: 2,jzkCk

1951 callable_obj = <object>params.userData 2,jzk

1952  

1953 return HostCallbackNode._create_with_params( 2,jzkCk

1954 h_node, callable_obj, params.fn, params.userData) 2,jzkCk

1955  

1956 def __repr__(self) -> str: 

1957 if self._callable is not None: 2qi

1958 name = getattr(self._callable, '__name__', '?') 2qi

1959 return f"<HostCallbackNode callback={name}>" 2qi

1960 return f"<HostCallbackNode cfunc=0x{<uintptr_t>self._fn:x}>" 

1961  

1962 @property 

1963 def callback_fn(self): 

1964 """The Python callable, or None for ctypes function pointer callbacks.""" 

1965 return self._callable 2Oq,j

1966  

1967  

1968cdef class ConditionalNode(GraphNode): 

1969 """Base class for conditional graph nodes. 

1970  

1971 When created via builder methods (if_cond, if_else, while_loop, switch), 

1972 a specific subclass (IfNode, IfElseNode, WhileNode, SwitchNode) is 

1973 returned. When reconstructed from the driver on CUDA 13.2+, the 

1974 correct subclass is determined via cuGraphNodeGetParams. On older 

1975 drivers, this base class is used as a fallback. 

1976  

1977 Properties 

1978 ---------- 

1979 condition : Condition or None 

1980 The condition variable controlling execution (None pre-13.2). 

1981 cond_type : str or None 

1982 The conditional type ("if", "while", or "switch"; None pre-13.2). 

1983 branches : tuple of GraphDef 

1984 The body graphs for each branch (empty pre-13.2). 

1985 """ 

1986  

1987 @staticmethod 

1988 cdef ConditionalNode _create_from_driver(GraphNodeHandle h_node): 

1989 cdef ConditionalNode n 

1990 if not _check_node_get_params(): 2ZcOkPkQkRkLc

1991 n = ConditionalNode.__new__(ConditionalNode) 2ZcOkPkQkRkLc

1992 n._h_node = h_node 2ZcOkPkQkRkLc

1993 n._condition = None 2ZcOkPkQkRkLc

1994 n._cond_type = cydriver.CU_GRAPH_COND_TYPE_IF 2ZcOkPkQkRkLc

1995 n._branches = () 2ZcOkPkQkRkLc

1996 return n 2ZcOkPkQkRkLc

1997  

1998 cdef cydriver.CUgraphNode node = as_cu(h_node) 

1999 params = handle_return(driver.cuGraphNodeGetParams( 

2000 <uintptr_t>node)) 

2001 cond_params = params.conditional 

2002 cdef int cond_type_int = int(cond_params.type) 

2003 cdef unsigned int size = int(cond_params.size) 

2004  

2005 cdef Condition condition = Condition.__new__(Condition) 

2006 condition._c_handle = <cydriver.CUgraphConditionalHandle>( 

2007 <unsigned long long>int(cond_params.handle)) 

2008  

2009 cdef GraphHandle h_graph = graph_node_get_graph(h_node) 

2010 cdef list branch_list = [] 

2011 cdef unsigned int i 

2012 cdef GraphHandle h_branch 

2013 if cond_params.phGraph_out is not None: 

2014 for i in range(size): 

2015 h_branch = create_graph_handle_ref( 

2016 <cydriver.CUgraph><uintptr_t>int(cond_params.phGraph_out[i]), 

2017 h_graph) 

2018 branch_list.append(GraphDef._from_handle(h_branch)) 

2019 cdef tuple branches = tuple(branch_list) 

2020  

2021 cdef type cls 

2022 if cond_type_int == <int>cydriver.CU_GRAPH_COND_TYPE_IF: 

2023 if size == 1: 

2024 cls = IfNode 

2025 else: 

2026 cls = IfElseNode 

2027 elif cond_type_int == <int>cydriver.CU_GRAPH_COND_TYPE_WHILE: 

2028 cls = WhileNode 

2029 else: 

2030 cls = SwitchNode 

2031  

2032 n = cls.__new__(cls) 

2033 n._h_node = h_node 

2034 n._condition = condition 

2035 n._cond_type = <cydriver.CUgraphConditionalNodeType>cond_type_int 

2036 n._branches = branches 

2037 return n 

2038  

2039 def __repr__(self) -> str: 

2040 return "<ConditionalNode>" 

2041  

2042 @property 

2043 def condition(self) -> Condition | None: 

2044 """The condition variable controlling execution.""" 

2045 return self._condition 2FldlKlGl

2046  

2047 @property 

2048 def cond_type(self) -> str | None: 

2049 """The conditional type as a string: 'if', 'while', or 'switch'. 

2050  

2051 Returns None when reconstructed from the driver pre-CUDA 13.2, 

2052 as the conditional type cannot be determined. 

2053 """ 

2054 if self._condition is None: 2FldlKlGl

2055 return None 

2056 if self._cond_type == cydriver.CU_GRAPH_COND_TYPE_IF: 2FldlKlGl

2057 return "if" 2Fldl

2058 elif self._cond_type == cydriver.CU_GRAPH_COND_TYPE_WHILE: 

2059 return "while" 2Gl

2060 else: 

2061 return "switch" 2Kl

2062  

2063 @property 

2064 def branches(self) -> tuple: 

2065 """The body graphs for each branch as a tuple of GraphDef. 

2066  

2067 Returns an empty tuple when reconstructed from the driver 

2068 pre-CUDA 13.2. 

2069 """ 

2070 return self._branches 2FldlKlGlrfY Lc

2071  

2072  

2073cdef class IfNode(ConditionalNode): 

2074 """An if-conditional node (1 branch, executes when condition is non-zero).""" 

2075  

2076 def __repr__(self) -> str: 

2077 return f"<IfNode condition=0x{<unsigned long long>self._condition._c_handle:x}>" 2/g

2078  

2079 @property 

2080 def then(self) -> GraphDef: 

2081 """The 'then' branch graph.""" 

2082 return self._branches[0] 2FlqfX

2083  

2084  

2085cdef class IfElseNode(ConditionalNode): 

2086 """An if-else conditional node (2 branches).""" 

2087  

2088 def __repr__(self) -> str: 

2089 return f"<IfElseNode condition=0x{<unsigned long long>self._condition._c_handle:x}>" 2.g

2090  

2091 @property 

2092 def then(self) -> GraphDef: 

2093 """The 'then' branch graph (executed when condition is non-zero).""" 

2094 return self._branches[0] 2dlnfV

2095  

2096 @property 

2097 def else_(self) -> GraphDef: 

2098 """The 'else' branch graph (executed when condition is zero).""" 

2099 return self._branches[1] 2dlnfV

2100  

2101  

2102cdef class WhileNode(ConditionalNode): 

2103 """A while-loop conditional node (1 branch, repeats while condition is non-zero).""" 

2104  

2105 def __repr__(self) -> str: 

2106 return f"<WhileNode condition=0x{<unsigned long long>self._condition._c_handle:x}>" 2:g

2107  

2108 @property 

2109 def body(self) -> GraphDef: 

2110 """The loop body graph.""" 

2111 return self._branches[0] 2GlsfZ

2112  

2113  

2114cdef class SwitchNode(ConditionalNode): 

2115 """A switch conditional node (N branches, selected by condition value).""" 

2116  

2117 def __repr__(self) -> str: 

2118 cdef Py_ssize_t n = len(self._branches) 2(f

2119 return (f"<SwitchNode condition=0x{<unsigned long long>self._condition._c_handle:x}" 2(f

2120 f" with {n} {'branch' if n == 1 else 'branches'}>") 2(f