Coverage for cuda/core/graph/_graph_node.pyx: 93.48%

460 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-10 02:27 +0000

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

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5"""GraphNode base class — factory, properties, and builder methods.""" 

6  

7from __future__ import annotations 

8  

9from collections.abc import Iterable 

10from typing import TYPE_CHECKING 

11  

12from libc.stddef cimport size_t 

13from libc.stdint cimport uintptr_t 

14from libc.string cimport memset as c_memset 

15  

16from libcpp.vector cimport vector 

17  

18from cuda.bindings cimport cydriver 

19  

20from cuda.core._event cimport Event, Event_check_open 

21from cuda.core._kernel_arg_handler cimport ParamHolder 

22from cuda.core._launch_config cimport LaunchConfig 

23from cuda.core._memory._buffer cimport Buffer, Buffer_check_open 

24from cuda.core._memory._location cimport cumemlocation_from_id 

25from cuda.core._module cimport Kernel 

26from cuda.core.graph._graph_definition cimport ( 

27 GraphCondition, 

28 GraphDefinition, 

29 GD_check_valid, 

30) 

31from cuda.core.graph._subclasses cimport ( 

32 AllocNode, 

33 ChildGraphNode, 

34 ConditionalNode, 

35 EmptyNode, 

36 EventRecordNode, 

37 EventWaitNode, 

38 FreeNode, 

39 HostCallbackNode, 

40 IfElseNode, 

41 IfNode, 

42 KernelNode, 

43 MemcpyNode, 

44 MemsetNode, 

45 SwitchNode, 

46 WhileNode, 

47) 

48from cuda.core._resource_handles cimport ( 

49 GraphHandle, 

50 GraphNodeHandle, 

51 OpaqueHandle, 

52 PreparedAttachment, 

53 as_cu, 

54 as_intptr, 

55 as_py, 

56 create_child_graph_handle, 

57 create_graph_node_handle, 

58 graph_clone_attachments, 

59 graph_commit_attachment, 

60 graph_node_get_graph, 

61 graph_prepare_attachment, 

62 invalidate_child_graph_state, 

63 invalidate_graph_node, 

64 make_opaque_py, 

65) 

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

67  

68from cuda.core.graph._host_callback cimport ( 

69 _resolve_host_callback, 

70) 

71  

72import ctypes as ct 

73import weakref 

74  

75from cuda.core.graph._adjacency_set_proxy import AdjacencySetProxy 

76from cuda.core._utils.validators import check_str_enum 

77from cuda.core._utils.cuda_utils import driver 

78from cuda.core.typing import GraphMemoryType 

79  

80if TYPE_CHECKING: 

81 from cuda.core._device import Device 

82  

83__all__ = ['GraphNode'] 

84  

85# See _cpp/REGISTRY_DESIGN.md (Level 2: Resource Handle -> Python Object) 

86_node_registry: weakref.WeakValueDictionary[int, GraphNode] = weakref.WeakValueDictionary() 

87  

88  

89cdef inline GraphNode _registered(GraphNode n): 

90 return _node_registry.setdefault(<uintptr_t>n._h_node.get(), n) 2~lCeBgpmDeqmam)j*jpfLepjqjrj]i$dsjMe^itjAfIkJkKkLkMkNkNe+jBfCfDfEfsdsgOkPkBiCiDiEiFic d e f HbIbJbKbujvjwjfdgdhd@j[j]jcgGi_i`frmtdOePeQeFfQkRkCgDg]bQ fcgchcicEgFg~j`iak{fudRebkSeckTedkGfSkTkGgHgek^b`jR fkjcgkkchklcikmcIgJg{i%dxjUe|iyj}i'dzjVe~iAjaj|fvdWeXeYeHfUkVkKgLg_bS ncocpcqcMgNgjkbjkk}fwdlkZemk0enk1eokIfWkXkOgPgpk`b{jT qkrcrkscsktctkucQgRgukcjvk~fxdwk2exk3eyk4ezkJfYkZkSgTgAk{bBkU CkvcDkwcEkxcFkycUgVgdjagyd5e6e7eKf0k1kWgXg|bV zcAcBcCcYgZgej(dBj8efjCjgj)dDj9ehjEj:jij*dFj!ejjGj_jjdbgHiHjqf2k0g1g2g3gDbEbFbGb=j,j-j3k4k}b^cidkjDcofWbXbYbZb3b4b5b6b5k#e6ktgug$e7krfsf8bub(b4g5gIiddJiKi/d:d;d=dmdEe/f:f_f_c@b.j{c8ktf`czd9k:c7b2bLbEc{l^j?jlj| |lndFcvg[b}ldgAdHk%ewgpd!k#k6g7g8g?d@d[d;f=fegxgyg$k%k9g!g#g+d,d-d-f.fBd?c@cLiMi]d^d_d)b*b+bkdld'kNiOiPi`d?f$g'ezgqd(k)k%g'g(g{d|d}d@f[fed*k(eAgrd+k,k)g*g+g~daebe]f^fmjCd,gcede.dvbwb-g-k.knjojfg/k{ IjDd)e:k;kLf=k.g/gQiW Gc:g;g(jJjEd*e?k@kMf[k=g?gRiX Hc@g[ggbufvfNfwfIcJc;cY KcLcMcKjFd+e]k^kOf_k]g^gSiZ Nc_g`g9b!b#b} ~ abbbLjGd,e`k{kPf|k{g|gTi0 Oc}g~gMjHd-e}k~kQfalahbhUi1 PcchdhNjId.eblclRfdlehfhVi2 Qcghhh/eC ~bac[cbchbibsb3 jbkblbOjJd:eelflSfglihjhWi4 RckhlhXiYieefegeheZiiejekeleO |c}c~cMbNbA ObPbQbPjKd;ehlilTfjlmhnh0i5 ScohphmeneoepegghgigjgkgQjLd=eklllUfmlqhrh1i6 TcshthMdFeGe0bHe,b-bo M .b/bRjNd?enlolVfpluhvh2i7 Ucwhxha u v w g h i j s xbybzbE F q G H SjOd@eqlrlWfslyhzh3i8 VcAhBhTjPd[etlulXfvlChDh4i9 WcEhFhUjQd]ewlxlYfylGhHh5i! XcIhJhlgVjRd^ezlAlZfBlKhLh6i# YcMhNhmbxfyf0fzfZc0c=c$ 1c2c3cWjSd_eClDl1fElOhPh7i% 4cQhRh$b%b'bcbdbebfbXjTd`eFlGl2fHlShTh8i' 5cUhVhYjUd{eIlJl3fKlWhXh9i( 6cYhZhZjVd|eLlMl4fNl0h1h!i) 7c2h3h}eD ccdc]cecnbobtb* pbqbrb0jWd~eOlPl5fQl4h5h#i+ 8c6h7h$i%iqeresete'iuevewexeP adbdcdRbSbB TbUbVb1jXdafRlSl6fTl8h9h(i, 9c!h#hyezeAeBemgngogpgqg2jYdbfUlVl7fWl$h%h)i- !c'h(hZdIeJe1bKe:b;bp N =b?b3j0dcfXlYl8fZl)h*h*i. #c+h,hb x y z k l m n t AbBbCbI J r K L 4j1ddf0l1l9f2l-h.h+i/ $c/h:h5j2def3l4l!f5l;h=h,i: %c?h@h6j3dff6l7l#f8l[h]h-i; 'c^h_hrg7j4dgf9l!l$f#l`h{h.i= (c|h}h8j5dhf$l%l%f'l~hai/i? )cbici9j6dif(l)l'f*ldiei:i@ *cfigi!j7djf+l,l(f-lhiii;i[ +cjiki#j8dkf.l/l)f:llimi=i] ,cnioi$j9dlf;l=l*f?lpiqi?i^ -crisi%j!dmf@l[l+f]ltiui@i_ .cviwi'j#dnf^l_l,f`lxiyi[i` /cziAi

91  

92  

93cdef class GraphNode: 

94 """A node in a graph definition. 

95  

96 Nodes are created by calling builder methods on GraphDefinition (for 

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

98 nodes that depend on a predecessor). 

99 """ 

100  

101 @staticmethod 

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

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

104 return GN_create(h_graph, node) 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e

105  

106 def __repr__(self) -> str: 

107 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2gn

108 if node == NULL: 2gn

109 if self._is_entry and self.is_valid: 2gn

110 return "<GraphNode entry>" 2gn

111 return "<GraphNode destroyed>" 

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

113  

114 def __eq__(self, other: object) -> bool: 

115 if not isinstance(other, GraphNode): 2odLe~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntn$o%o'o(o)o*o+o,o-o.o/o:o;o=o?ounvnwnxnynznAn@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpBnCnDnEnFnGnHnInJnKnLnMnNnJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8nYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p9n!n#n$n%n'n(n)n*n%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p+n,n-n.n/n:n;n=n?n@n[n[p]p^p_p`p{p|p}p~paqbqcqdqeqfq]n^n_n`n{n|n}n~naobocodoeofogohoiogqhqiqjqkqlqmqnqoqpqqqrqsqtquqjokolomonooopoqorosotouovowovqwqxqyqzqAqBqCqDqEqFqGqHqIqJqxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

116 return NotImplemented 2XmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJq

117 cdef GraphNode o = <GraphNode>other 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

118 cdef GraphHandle self_graph = graph_node_get_graph(self._h_node) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

119 cdef GraphHandle other_graph = graph_node_get_graph(o._h_node) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

120 return (as_intptr(self._h_node) == as_intptr(o._h_node) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

121 and as_intptr(self_graph) == as_intptr(other_graph)) 2Le~jakbmbkckdkcmdmemek`jfkgkhkikfmgmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkXmYmZm0m1m2m3m4m5m6m7m8m9m!m#minjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMo$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

122  

123 def __hash__(self) -> int: 

124 cdef GraphHandle g = graph_node_get_graph(self._h_node) 2CepmDeqmLeHmImKqJmKmLqNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmRmSmTmUmVmWmumvm8owmxm9oymzm!oAmBm#o_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6b_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%eBd?c@cLiMi]d^d_d)b*b+bkdld'e(eMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

125 return hash((as_intptr(self._h_node), as_intptr(g))) 2CepmDeqmLeHmImKqJmKmLqNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmRmSmTmUmVmWmumvm8owmxm9oymzm!oAmBm#o_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6b_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%eBd?c@cLiMi]d^d_d)b*b+bkdld'e(eMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnen

126  

127 @property 

128 def type(self) -> driver.CUgraphNodeType | None: 

129 """Return the CUDA graph node type. 

130  

131 Returns 

132 ------- 

133 CUgraphNodeType or None 

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

135 """ 

136 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2OoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7oFc

137 if node == NULL: 2OoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7oFc

138 return None 2OoFc

139 cdef cydriver.CUgraphNodeType node_type 

140 with nogil: 2PoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o

141 HANDLE_RETURN(cydriver.cuGraphNodeGetType(node, &node_type)) 2PoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o

142 return driver.CUgraphNodeType(<int>node_type) 2odPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o

143  

144 @property 

145 def graph(self) -> GraphDefinition: 

146 """Return the GraphDefinition this node belongs to.""" 

147 return GraphDefinition._from_handle(graph_node_get_graph(self._h_node)) 2|t}t~taubucu

148  

149 @property 

150 def handle(self) -> driver.CUgraphNode: 

151 """Return the underlying driver CUgraphNode handle. 

152  

153 Returns None for the entry node. 

154 """ 

155 return as_py(self._h_node) 2FcHk$g.d{ XmYmZm0m1m2m3m4m5m6m7m8m9m!m#m

156  

157 @property 

158 def is_valid(self) -> bool: 

159 """Whether this node and its graph definition remain valid. 

160  

161 Returns ``False`` after :meth:`destroy` has been called. 

162 """ 

163 return ( 2DcWbXbYbZbzdndFc[bBd?c@cLiMi]d^d_d)b*b+bkdld(jgn

164 as_intptr(graph_node_get_graph(self._h_node)) != 0 2DcWbXbYbZbzdndFc[bBd?c@cLiMi]d^d_d)b*b+bkdld(jgn

165 and (self._is_entry or as_intptr(self._h_node) != 0) 2DczdndFc[bBd?c@cLiMi]d^d_d)b*b+bkdld(jgn

166 ) 

167  

168 def destroy(self) -> None: 

169 """Destroy this node and remove all its edges from the parent graph. 

170  

171 After this call, :attr:`is_valid` returns ``False`` and the node 

172 cannot be re-added to any graph. Safe to call on an 

173 already-destroyed node (no-op). 

174 """ 

175 cdef cydriver.CUgraphNode node = as_cu(self._h_node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

176 cdef PreparedAttachment prepared 

177 if self._is_entry or node == NULL: 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

178 return 2Fc

179  

180 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

181 # Allocate the cleanup transaction before asking CUDA to destroy the 

182 # node. A failed CUDA call leaves metadata and wrappers unchanged. 

183 HANDLE_RETURN(graph_prepare_attachment( 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

184 h_graph, OpaqueHandle(), OpaqueHandle(), &prepared)) 

185 with nogil: 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

186 HANDLE_RETURN(cydriver.cuGraphDestroyNode(node)) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvg[bBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

187  

188 # Publish attachment removal before invalidating graph and node aliases. 

189 cdef cydriver.CUresult cleanup_status = graph_commit_attachment(prepared, node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

190 invalidate_child_graph_state(h_graph, node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

191 _node_registry.pop(<uintptr_t>self._h_node.get(), None) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

192 invalidate_graph_node(self._h_node) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

193 HANDLE_RETURN(cleanup_status) 2:j=j,j-j^cidkjDcofWbXbYbZb3b4b5b6b_c.j{c`c7b2bLbndFcvgBd?c@cLiMi]d^d_d)b*b+bkdlded{ (j

194  

195 @property 

196 def pred(self) -> AdjacencySetProxy: 

197 """A mutable set-like view of this node's predecessors.""" 

198 return AdjacencySetProxy(self, False) 2pfAfOo+jfdgdhd@jcgukvkduwkxkykzkeufuguhuAkBkCkDkEkFkiujuumvm8owmxm9ojdrfsf8bubdd?jlj| ndFc

199  

200 @pred.setter 

201 def pred(self, value: Iterable[GraphNode]) -> None: 

202 p = AdjacencySetProxy(self, False) 2Lblj

203 p.clear() 2Lblj

204 p.update(value) 2Lblj

205  

206 @property 

207 def succ(self) -> AdjacencySetProxy: 

208 """A mutable set-like view of this node's successors.""" 

209 return AdjacencySetProxy(self, True) 2Oo+j[j]jukvkwkxkykzkAkBkCkDkEkFkymzm!oAmBm#o2bEc{l^j?jlj| |lndFcvg}l

210  

211 @succ.setter 

212 def succ(self, value: Iterable[GraphNode]) -> None: 

213 s = AdjacencySetProxy(self, True) 2+jlj

214 s.clear() 2+jlj

215 s.update(value) 2+jlj

216  

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

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

219  

220 Clustered and cooperative launch configurations are not currently 

221 supported for graph kernel nodes. 

222  

223 .. warning:: 

224  

225 Use caution when a retained kernel argument directly or indirectly 

226 owns a graph. Any reference cycle involving the argument and a 

227 graph that retains it cannot be broken by Python's cyclic garbage 

228 collector. Use a weak reference to break such cycles. 

229  

230 Parameters 

231 ---------- 

232 config : LaunchConfig 

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

234 kernel : Kernel 

235 The kernel to launch. 

236 *args 

237 Kernel arguments. 

238  

239 Returns 

240 ------- 

241 KernelNode 

242 A new KernelNode representing the kernel launch. 

243 """ 

244 GN_check_valid(self) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

245 return GN_launch(self, config, <Kernel>kernel, ParamHolder(args)) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

246  

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

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

249  

250 This is used to synchronize multiple branches of execution. 

251  

252 Parameters 

253 ---------- 

254 *nodes : GraphNode 

255 Additional nodes to depend on. 

256  

257 Returns 

258 ------- 

259 EmptyNode 

260 A new EmptyNode that depends on all input nodes. 

261 """ 

262 return GN_join(self, nodes) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

263  

264 def allocate(self, size_t size, *, device: Device | int | None = None, 

265 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

266 peer_access: list[Device | int] | None = None) -> AllocNode: 

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

268  

269 Parameters 

270 ---------- 

271 size : int 

272 Number of bytes to allocate. 

273 device : int or Device, optional 

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

275 uses the current CUDA context's device. 

276 memory_type : GraphMemoryType or str, optional 

277 Type of memory to allocate. One of: 

278  

279 - ``GraphMemoryType.DEVICE`` (default): Pinned device memory, 

280 optimal for GPU kernels. 

281 - ``GraphMemoryType.HOST``: Pinned host memory, accessible from 

282 both host and device. Useful for graphs containing host 

283 callback nodes. Note: may not be supported on all 

284 systems/drivers. 

285 - ``GraphMemoryType.MANAGED``: Managed/unified memory that 

286 automatically migrates between host and device. Useful for 

287 mixed host/device access patterns. 

288  

289 peer_access : list of int or Device, optional 

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

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

292 device has access. 

293  

294 Returns 

295 ------- 

296 AllocNode 

297 A new AllocNode representing the allocation. Access the allocated 

298 device pointer via the dptr property. 

299  

300 Notes 

301 ----- 

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

303 memory allocation nodes per CUDA documentation. 

304 """ 

305 return GN_alloc(self, size, device, memory_type, peer_access) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

306  

307 def deallocate(self, dptr: int) -> FreeNode: 

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

309  

310 Parameters 

311 ---------- 

312 dptr : int 

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

314  

315 Returns 

316 ------- 

317 FreeNode 

318 A new FreeNode representing the free operation. 

319 """ 

320 return GN_free(self, <cydriver.CUdeviceptr>dptr) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

321  

322 def memset( 

323 self, 

324 dst: Buffer | int, 

325 value, 

326 size_t width, 

327 size_t height=1, 

328 size_t pitch=0, 

329 *, 

330 dst_owner=None, 

331 ) -> MemsetNode: 

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

333  

334 .. warning:: 

335  

336 Use caution when a retained operand owner directly or indirectly 

337 owns a graph. Any reference cycle involving the owner and a graph 

338 that retains it cannot be broken by Python's cyclic garbage 

339 collector. Use a weak reference to break such cycles. 

340  

341 Parameters 

342 ---------- 

343 dst : Buffer or int 

344 Destination. When ``dst`` is a :class:`Buffer`, the underlying 

345 allocation is retained for the graph's lifetime. A raw pointer 

346 (``int``) is used as-is; the caller must keep the underlying memory 

347 alive, or supply ``dst_owner`` to have the graph retain it. 

348 value : int or buffer-protocol object 

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

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

351 width : int 

352 Width of the row in elements. 

353 height : int, optional 

354 Number of rows (default 1). 

355 pitch : int, optional 

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

357 dst_owner : object, optional 

358 Object retained for the graph's lifetime when ``dst`` is a raw 

359 pointer. A :class:`Buffer` owner retains its underlying allocation, 

360 not the wrapper. Must not be passed when ``dst`` is a :class:`Buffer`. 

361  

362 Returns 

363 ------- 

364 MemsetNode 

365 A new MemsetNode representing the memset operation. 

366  

367 Raises 

368 ------ 

369 ValueError 

370 If ``dst_owner`` is given together with a :class:`Buffer` ``dst``. 

371 """ 

372 GN_check_valid(self) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcbg/f:ffnhn_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

373 cdef cydriver.CUdeviceptr c_dst 

374 cdef unsigned int val 

375 cdef unsigned int elem_size 

376 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcbg/f:ffnhn_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

377 dst, dst_owner, "dst", &c_dst) 

378 val, elem_size = _parse_fill_value(value) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCcbg/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

379 return GN_memset( 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

380 self, c_dst, dst_attachment_owner, 

381 val, elem_size, width, height, pitch) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

382  

383 def memcpy( 

384 self, 

385 dst: Buffer | int, 

386 src: Buffer | int, 

387 size_t size, 

388 *, 

389 dst_owner=None, 

390 src_owner=None, 

391 ) -> MemcpyNode: 

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

393  

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

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

396 pointers are supported. 

397  

398 .. warning:: 

399  

400 Use caution when a retained operand owner directly or indirectly 

401 owns a graph. Any reference cycle involving the owner and a graph 

402 that retains it cannot be broken by Python's cyclic garbage 

403 collector. Use a weak reference to break such cycles. 

404  

405 Parameters 

406 ---------- 

407 dst : Buffer or int 

408 Destination (device or pinned host). When a :class:`Buffer` is given, 

409 the underlying allocation is retained for the graph's lifetime. A raw 

410 pointer (``int``) is used as-is; the caller must keep the underlying 

411 memory alive, or supply ``dst_owner`` to have the graph retain it. 

412 src : Buffer or int 

413 Source (device or pinned host). Same retention rules as ``dst``; 

414 use ``src_owner`` for a raw pointer. 

415 size : int 

416 Number of bytes to copy. 

417 dst_owner : object, optional 

418 Object retained for the graph's lifetime when ``dst`` is a raw 

419 pointer. A :class:`Buffer` owner retains its underlying allocation. 

420 Must not be passed when ``dst`` is a :class:`Buffer`. 

421 src_owner : object, optional 

422 Object retained for the graph's lifetime when ``src`` is a raw 

423 pointer. A :class:`Buffer` owner retains its underlying allocation. 

424 Must not be passed when ``src`` is a :class:`Buffer`. 

425  

426 Returns 

427 ------- 

428 MemcpyNode 

429 A new MemcpyNode representing the copy operation. 

430  

431 Raises 

432 ------ 

433 ValueError 

434 If ``dst_owner`` or ``src_owner`` is given together with a 

435 :class:`Buffer` ``dst`` or ``src`` respectively. 

436 """ 

437 GN_check_valid(self) 2c d e f Q R S T U V qfidub(b/dNoom:d;d=dtmmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

438 cdef cydriver.CUdeviceptr c_dst 

439 cdef cydriver.CUdeviceptr c_src 

440 cdef OpaqueHandle dst_attachment_owner = _resolve_memcpy_operand( 2c d e f Q R S T U V qfidub(b/dNoom:d;d=dtmmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

441 dst, dst_owner, "dst", &c_dst) 

442 cdef OpaqueHandle src_attachment_owner = _resolve_memcpy_operand( 2c d e f Q R S T U V qfidub(b/dom:d;d=dtmmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

443 src, src_owner, "src", &c_src) 

444 return GN_memcpy( 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

445 self, c_dst, dst_attachment_owner, 

446 c_src, src_attachment_owner, size) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

447  

448 def embed(self, child: GraphDefinition) -> ChildGraphNode: 

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

450  

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

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

453 nodes. 

454  

455 Parameters 

456 ---------- 

457 child : GraphDefinition 

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

459  

460 Returns 

461 ------- 

462 ChildGraphNode 

463 A new ChildGraphNode representing the embedded sub-graph. 

464 """ 

465 return GN_embed(self, <GraphDefinition>child) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

466  

467 def record(self, event: Event) -> EventRecordNode: 

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

469  

470 Parameters 

471 ---------- 

472 event : Event 

473 The event to record. 

474  

475 Returns 

476 ------- 

477 EventRecordNode 

478 A new EventRecordNode representing the event record operation. 

479 """ 

480 return GN_record_event(self, <Event>event) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

481  

482 def wait(self, event: Event) -> EventWaitNode: 

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

484  

485 Parameters 

486 ---------- 

487 event : Event 

488 The event to wait for. 

489  

490 Returns 

491 ------- 

492 EventWaitNode 

493 A new EventWaitNode representing the event wait operation. 

494 """ 

495 return GN_wait_event(self, <Event>event) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

496  

497 def callback(self, fn, *, user_data=None) -> object: 

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

499  

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

501 Two modes are supported: 

502  

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

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

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

506 - **ctypes function pointer**: The function receives a single 

507 ``void*`` argument (the ``user_data``), and the caller must keep 

508 the ctypes wrapper alive for the lifetime of the graph. Its 

509 declared prototype must match the driver's ``CUhostFn`` 

510 (``void (*)(void*)``): ``ctypes.CFUNCTYPE(None, ctypes.c_void_p)``, 

511 or ``ctypes.WINFUNCTYPE(None, ctypes.c_void_p)`` on Windows. 

512  

513 .. warning:: 

514  

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

516 deadlock or corrupt driver state. 

517  

518 Use caution when a Python callback retains an object that owns a 

519 graph. Any reference cycle involving the callback and a graph that 

520 retains it cannot be broken by Python's cyclic garbage collector. 

521 Use a weak reference to break such cycles. 

522  

523 Parameters 

524 ---------- 

525 fn : callable or ctypes function pointer 

526 The callback function. 

527 user_data : int or bytes-like, optional 

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

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

530 copied and its lifetime is tied to the graph. 

531  

532 Returns 

533 ------- 

534 HostCallbackNode 

535 A new HostCallbackNode representing the callback. 

536  

537 Raises 

538 ------ 

539 TypeError 

540 If ``fn`` is a ctypes function pointer whose declared prototype 

541 does not match ``CUhostFn``. 

542 ValueError 

543 If ``user_data`` is given for a Python callable. 

544 """ 

545 return GN_callback(self, fn, user_data) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

546  

547 def if_then(self, condition: GraphCondition) -> IfNode: 

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

549  

550 The body graph executes only when the condition evaluates to 

551 a non-zero value at runtime. 

552  

553 Parameters 

554 ---------- 

555 condition : GraphCondition 

556 GraphCondition from :meth:`GraphDefinition.create_condition`. 

557  

558 Returns 

559 ------- 

560 IfNode 

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

562 """ 

563 return _make_conditional_node( 2LeDgHgLgPgTgXg|j0gDbWb3b/g?gJc^g~ |gbhfhibjhfejeNbnhneigjgkgrh-bvhh F zhDhHhLh0cPhdbThXh1hob5hreveSb9hzeogpgqg%h;b*hl J .h=h]h{haieiiimiqiuiyi

564 self, condition, 

565 cydriver.CU_GRAPH_COND_TYPE_IF, 1, IfNode) 2LeDgHgLgPgTgXg|j0gDbWb3b/g?gJc^g~ |gbhfhibjhfejeNbnhneigjgkgrh-bvhh F zhDhHhLh0cPhdbThXh1hob5hreveSb9hzeogpgqg%h;b*hl J .h=h]h{haieiiimiqiuiyi

566  

567 def if_else(self, condition: GraphCondition) -> IfElseNode: 

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

569  

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

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

572  

573 Parameters 

574 ---------- 

575 condition : GraphCondition 

576 GraphCondition from :meth:`GraphDefinition.create_condition`. 

577  

578 Returns 

579 ------- 

580 IfElseNode 

581 A new IfElseNode with branches accessible via 

582 ``.then`` and ``.else_``. 

583 """ 

584 return _make_conditional_node( 2CgGgKgOgSgWg1gEbXb4b.g=gIc]g} {gahehhbiheeieMbmhmegghgigqh,buhg E yhChGhKhZcOhcbShWh0hnb4hqeueRb8hyemgngog$h:b)hk I -h;h[h`h~hdihilipitixi

585 self, condition, 

586 cydriver.CU_GRAPH_COND_TYPE_IF, 2, IfElseNode) 2CgGgKgOgSgWg1gEbXb4b.g=gIc]g} {gahehhbiheeieMbmhmegghgigqh,buhg E yhChGhKhZcOhcbShWh0hnb4hqeueRb8hyemgngog$h:b)hk I -h;h[h`h~hdihilipitixi

587  

588 def while_loop(self, condition: GraphCondition) -> WhileNode: 

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

590  

591 The body graph executes repeatedly while the condition 

592 evaluates to a non-zero value. 

593  

594 Parameters 

595 ---------- 

596 condition : GraphCondition 

597 GraphCondition from :meth:`GraphDefinition.create_condition`. 

598  

599 Returns 

600 ------- 

601 WhileNode 

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

603 """ 

604 return _make_conditional_node( 2FgJgNgRgVgZg3gGbZb6btf;g[gMc`gbb~gdhhhlblhheleQbphpehgkgth/bxhj H BhFhJhlgNh3cRhfbVhZh3hrb7htexeVb#hBengqg(h?b,hn L :h@h_hrg}hcigikioisiwiAi

605 self, condition, 

606 cydriver.CU_GRAPH_COND_TYPE_WHILE, 1, WhileNode) 2FgJgNgRgVgZg3gGbZb6btf;g[gMc`gbb~gdhhhlblhheleQbphpehgkgth/bxhj H BhFhJhlgNh3cRhfbVhZh3hrb7htexeVb#hBengqg(h?b,hn L :h@h_hrg}hcigikioisiwiAi

607  

608 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode: 

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

610  

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

612 value is out of range, no branch executes. 

613  

614 Parameters 

615 ---------- 

616 condition : GraphCondition 

617 GraphCondition from :meth:`GraphDefinition.create_condition`. 

618 count : int 

619 Number of switch cases (branches). 

620  

621 Returns 

622 ------- 

623 SwitchNode 

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

625 """ 

626 return _make_conditional_node( 2EgIgMgQgUgYg}j2gFbYb5b:g@gLc_gab}gchghkbkhgekePbohoeggjgsh.bwhi G AhEhIhlgMh2cQhebUhYh2hqb6hseweUb!hAemgpg'h=b+hm K /h?h^hrg|hbifijinirivizi

627 self, condition, 

628 cydriver.CU_GRAPH_COND_TYPE_SWITCH, count, SwitchNode) 2EgIgMgQgUgYg}j2gFbYb5b:g@gLc_gab}gchghkbkhgekePbohoeggjgsh.bwhi G AhEhIhlgMh2cQhebUhYh2hqb6hseweUb!hAemgpg'h=b+hm K /h?h^hrg|hbifijinirivizi

629  

630  

631cdef inline ConditionalNode _make_conditional_node( 

632 GraphNode pred, 

633 GraphCondition condition, 

634 cydriver.CUgraphConditionalNodeType cond_type, 

635 unsigned int size, 

636 type node_cls): 

637 GN_check_valid(pred) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

638 if not isinstance(condition, GraphCondition): 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

639 raise TypeError( 

640 f"condition must be a GraphCondition object (from " 

641 f"GraphDefinition.create_condition()), got {type(condition).__name__}") 

642 cdef cydriver.CUgraphNodeParams params 

643 cdef cydriver.CUgraphNode new_node = NULL 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

644  

645 c_memset(&params, 0, sizeof(params)) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

646 params.type = cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

647 params.conditional.handle = condition._c_handle 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

648 params.conditional.type = cond_type 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

649 params.conditional.size = size 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

650  

651 cdef cydriver.CUcontext ctx = NULL 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

652 cdef GraphHandle h_graph = graph_node_get_graph(pred._h_node) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

653 cdef cydriver.CUgraphNode pred_node = as_cu(pred._h_node) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

654 cdef cydriver.CUgraphNode* deps = NULL 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

655 cdef size_t num_deps = 0 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

656  

657 if pred_node != NULL: 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

658 deps = &pred_node 

659 num_deps = 1 

660  

661 with nogil: 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

662 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

663 params.conditional.ctx = ctx 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

664  

665 with nogil: 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

666 IF CUDA_CORE_BUILD_MAJOR >= 13: 

667 HANDLE_RETURN(cydriver.cuGraphAddNode( 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg|j}j0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

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

669 ELSE: 

670 HANDLE_RETURN(cydriver.cuGraphAddNode( 

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

672  

673 cdef list branch_list = [] 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

674 cdef unsigned int i 

675 cdef cydriver.CUgraph bg 

676 cdef GraphHandle h_branch 

677 for i in range(size): 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

678 bg = params.conditional.phGraph_out[i] 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

679 h_branch = create_child_graph_handle(bg, h_graph, new_node) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

680 branch_list.append(GraphDefinition._from_handle(h_branch)) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

681 cdef tuple branches = tuple(branch_list) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

682  

683 cdef ConditionalNode n = node_cls.__new__(node_cls) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

684 n._h_node = create_graph_node_handle(new_node, h_graph) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

685 n._condition = condition 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

686 n._cond_type = cond_type 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

687 n._branches = branches 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

688  

689 return _registered(n) 2LeCgDgEgFgGgHgIgJgKgLgMgNgOgPgQgRgSgTgUgVgWgXgYgZg0g1g2g3gDbEbFbGbWbXbYbZb3b4b5b6btf.g/g:g;g=g?g@g[gIcJcLcMc]g^g_g`g} ~ abbb{g|g}g~gahbhchdhehfhghhhhbibkblbihjhkhlheefegeheiejekeleMbNbPbQbmhnhohphmeneoepegghgigjgkgqhrhshth,b-b.b/buhvhwhxhg h i j E F G H yhzhAhBhChDhEhFhGhHhIhJhlgKhLhMhNhZc0c2c3cOhPhQhRhcbdbebfbShThUhVhWhXhYhZh0h1h2h3hnbobqbrb4h5h6h7hqereseteuevewexeRbSbUbVb8h9h!h#hyezeAeBemgngogpgqg$h%h'h(h:b;b=b?b)h*h+h,hk l m n I J K L -h.h/h:h;h=h?h@h[h]h^h_hrg`h{h|h}h~haibicidieifigihiiijikiliminioipiqirisitiuiviwixiyiziAi

690  

691cdef inline GraphNode GN_create(GraphHandle h_graph, cydriver.CUgraphNode node): 

692 cdef GraphNodeHandle h_node = create_graph_node_handle(node, h_graph) 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e

693  

694 # Sentinel: virtual node to represent the graph entry point. 

695 if node == NULL: 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e

696 n = GraphNode.__new__(GraphNode) 

697 (<GraphNode>n)._h_node = h_node 

698 (<GraphNode>n)._is_entry = True 

699 return n 

700  

701 # Return a registered object or create and register a new one. 

702 registered = _node_registry.get(<uintptr_t>h_node.get()) 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e

703 if registered is not None: 2CepmDeqmLeHmImJmKmNe+jfdgdhd@j[j]jrm~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjdDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bubdd_c@b{ctf`czd:c7b2bLbEc^j?jlj| Fcvg[b%e?c@c'e(e

704 return <GraphNode>registered 2CeDeLeHmImJmKm+jfdgdhd@j[j]j~jakbmbkckdkcmdmemek`jfkgkhkikfmgmLmMmNmOmPmQmjkkkhmlkmknkokimjmkmlmpk{jqkrksktkmmnmukvkwkxkykzkAkBkCkDkEkFkRmSmTmUmVmWmumvmwmxmymzmAmBm_jjddd:c7b2bLbEc^j?jlj| Fcvg[b

705 else: 

706 return _registered(GN_create_impl(h_node)) 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e

707  

708  

709cdef inline GraphNode GN_create_impl(GraphNodeHandle h_node): 

710 cdef cydriver.CUgraphNodeType node_type 

711 with nogil: 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e

712 HANDLE_RETURN(cydriver.cuGraphNodeGetType(as_cu(h_node), &node_type)) 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e

713  

714 if node_type == cydriver.CU_GRAPH_NODE_TYPE_EMPTY: 2CepmDeqmNerm~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkBkCkDkEkFkDbEbFbGb=j}b^cDcWbXbYbZb3b4b5b6brfsf8bub_c@b{ctf`czd| %e?c@c'e(e

715 return EmptyNode._create_impl(h_node) 2`j{jBk

716 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_KERNEL: 

717 return KernelNode._create_from_driver(h_node) 2CepmDeqmrmDbEbFbGb}b@b|

718 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_ALLOC: 

719 return AllocNode._create_from_driver(h_node) 2~jakbkckdkek`jfkgkhkikjkkklkmknkokpk{jqkrksktkukvkwkxkykzkAkCkDkEkFk

720 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEM_FREE: 

721 return FreeNode._create_from_driver(h_node) 28b

722 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMSET: 

723 return MemsetNode._create_from_driver(h_node) 1|

724 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_MEMCPY: 

725 return MemcpyNode._create_from_driver(h_node) 2ub

726 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_GRAPH: 

727 return ChildGraphNode._create_from_driver(h_node) 2=j^cDc_c@b`czd

728 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_EVENT_RECORD: 

729 return EventRecordNode._create_from_driver(h_node) 2rf

730 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_WAIT_EVENT: 

731 return EventWaitNode._create_from_driver(h_node) 2sf

732 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_HOST: 

733 return HostCallbackNode._create_from_driver(h_node) 2Ne=j^cDc_c{c`czd%e?c@c'e(e

734 elif node_type == cydriver.CU_GRAPH_NODE_TYPE_CONDITIONAL: 

735 return ConditionalNode._create_from_driver(h_node) 2WbXbYbZb3b4b5b6btf

736 else: 

737 n = GraphNode.__new__(GraphNode) 

738 (<GraphNode>n)._h_node = h_node 

739 return n 

740  

741cdef inline KernelNode GN_launch(GraphNode self, LaunchConfig conf, Kernel ker, ParamHolder ker_args): 

742 cdef cydriver.CUgraphNode new_node = NULL 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

743 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

744 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

745 cdef cydriver.CUgraphNode* deps = NULL 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

746 cdef size_t num_deps = 0 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

747 cdef OpaqueHandle args_owner 

748 cdef PreparedAttachment prepared 

749  

750 GN_check_valid(self) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

751 if conf.cluster is not None or conf.is_cooperative: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

752 raise NotImplementedError( 2,g

753 "clustered or cooperative graph kernel nodes are not supported") 

754  

755 if pred_node != NULL: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

756 deps = &pred_node 2CeDecg]b^b_b`b{b|b:c7b2bLbEc| AdCdfg

757 num_deps = 1 2CeDecg]b^b_b`b{b|b:c7b2bLbEc| AdCdfg

758  

759 cdef cydriver.CUDA_KERNEL_NODE_PARAMS node_params = cydriver.CUDA_KERNEL_NODE_PARAMS( 

760 kern=as_cu(ker._h_kernel), 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

761 func=<cydriver.CUfunction>NULL, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

762 gridDimX=conf.grid[0], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

763 gridDimY=conf.grid[1], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

764 gridDimZ=conf.grid[2], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

765 blockDimX=conf.block[0], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

766 blockDimY=conf.block[1], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

767 blockDimZ=conf.block[2], 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

768 sharedMemBytes=conf.shmem_size, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

769 kernelParams=<void**><uintptr_t>(ker_args.ptr), 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

770 extra=NULL, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

771 ctx=<cydriver.CUcontext>NULL, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

772 ) 

773  

774 # Keep the kernel and argument objects alive because CUDA copies argument 

775 # values but does not retain the resources they reference. 

776 cdef OpaqueHandle kernel_owner = ker._h_kernel 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

777 kernel_args = ker_args.kernel_args 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

778 if kernel_args is not None: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

779 args_owner = make_opaque_py(kernel_args) 2CeBgDe4g5g:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_d%g'g(g)g*g+gCd-gfg

780 HANDLE_RETURN(graph_prepare_attachment( 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

781 h_graph, kernel_owner, args_owner, &prepared)) 

782  

783 with nogil: 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

784 HANDLE_RETURN(cydriver.cuGraphAddKernelNode( 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

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

786  

787 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

788  

789 return _registered(KernelNode._create_with_params( 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

790 create_graph_node_handle(new_node, h_graph), 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

791 conf.grid, conf.block, conf.shmem_size, 2CeBgDesdBiCiDiEiFicgGitd]bud^bvd_bwd`bxd{byd|bHiDbEbFbGb}b4g5gIiddJiKi@b:c7b2bLbEc| Ad6g7g8g9g!g#g]d^d_dNiOiPi$g%g'g(ged)g*g+gCd,g-gfgDdQiEdRigb;cFdSi9b!b#b} ~ abbbGdTiHdUiIdViC sbJdWiO Kd0iLd1iMdFeGe0bHe,b-bo M .b/bNd2ia s Od3iPd4iQd5iRd6imb=cSd7i$b%b'bcbdbebfbTd8iUd9iVd!iD tbWd#iP Xd(iYd)iZdIeJe1bKe:b;bp N =b?b0d*ib t 1d+i2d,i3d-i4d.i5d/i6d:i7d;i8d=i9d?i!d@i#d[i

792 ker._h_kernel)) 

793  

794  

795cdef inline EmptyNode GN_join(GraphNode self, tuple nodes): 

796 cdef vector[cydriver.CUgraphNode] deps 

797 cdef cydriver.CUgraphNode new_node = NULL 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

798 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

799 cdef GraphNode other 

800 cdef cydriver.CUgraphNode* deps_ptr = NULL 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

801 cdef size_t num_deps = 0 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

802 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

803  

804 GN_check_valid(self) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

805 if pred_node != NULL: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

806 deps.push_back(pred_node) 2$d%d'd(d)d*djdnd

807 for other in nodes: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

808 GN_check_valid(other) 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!e:c7b2bLbEcnd)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

809 if as_cu((<GraphNode>other)._h_node) != NULL: 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!e:c7b2bLbEc)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

810 deps.push_back(as_cu((<GraphNode>other)._h_node)) 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!e:c7b2bLbEc)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

811  

812 num_deps = deps.size() 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

813 if num_deps > 0: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

814 deps_ptr = deps.data() 2$dMec d e f fdgdhdOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e*d!ejd:c7b2bLbEc)eW *eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

815  

816 with nogil: 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

817 HANDLE_RETURN(cydriver.cuGraphAddEmptyNode( 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

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

819  

820 return _registered(EmptyNode._create_impl(create_graph_node_handle(new_node, h_graph))) 2~lam$dMe+jc d e f fdgdhd@j[j]jOeQ ReR %dUe'dVeWeS ZeT 2eU 5eV (d8e)d9e:j*d!e_jjd:c7b2bLbEc{l^j?jlj|lndvg}ledmjnjoj)eW (j*eX Y +eZ ,e0 -e1 .e2 /eC ~bac[cbchbibsb3 jbkblb:e4 A ;e5 =e6 o ?e7 a u v w g h i j q @e8 [e9 ]e! ^e# $ _e% `e' {e( |e) }eD ccdc]cecnbobtb* pbqbrb~e+ B af, bf- p cf. b x y z k l m n r df/ ef: ff; gf= hf? if@ jf[ kf] lf^ mf_ nf`

821  

822  

823cdef inline AllocNode GN_alloc(GraphNode self, size_t size, object device, 

824 object memory_type, object peer_access): 

825 cdef int device_id 

826 cdef cydriver.CUdevice dev 

827  

828 GN_check_valid(self) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

829 if device is None: 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

830 with nogil: 2pf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

831 HANDLE_RETURN(cydriver.cuCtxGetDevice(&dev)) 2pf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

832 device_id = <int>dev 2pf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

833 else: 

834 device_id = getattr(device, 'device_id', device) 2)j*j

835  

836 cdef cydriver.CUDA_MEM_ALLOC_NODE_PARAMS alloc_params 

837 cdef cydriver.CUgraphNode new_node = NULL 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

838 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

839 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

840 cdef cydriver.CUgraphNode* deps = NULL 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

841 cdef size_t num_deps = 0 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

842  

843 if pred_node != NULL: 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

844 deps = &pred_node 2pf]i$d^i_i`f`i{f{i%d|i}i'd~iaj|fbj}fcj~fdjagej(dfjgj)dhjij*djj

845 num_deps = 1 2pf]i$d^i_i`f`i{f{i%d|i}i'd~iaj|fbj}fcj~fdjagej(dfjgj)dhjij*djj

846  

847 cdef vector[cydriver.CUmemAccessDesc] access_descs 

848 cdef cydriver.CUmemAccessDesc access_desc 

849 cdef int peer_id 

850 cdef list peer_ids = [] 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

851  

852 if peer_access is not None: 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

853 for peer_dev in peer_access: 

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

855 peer_ids.append(peer_id) 

856 access_desc.location = cumemlocation_from_id( 

857 cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE, peer_id) 

858 access_desc.flags = cydriver.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE 

859 access_descs.push_back(access_desc) 

860  

861 cdef str memory_type_str = "device" if memory_type is None else str(memory_type) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

862  

863 c_memset(&alloc_params, 0, sizeof(alloc_params)) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

864 alloc_params.poolProps.handleTypes = cydriver.CUmemAllocationHandleType.CU_MEM_HANDLE_TYPE_NONE 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

865 alloc_params.bytesize = size 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

866  

867 check_str_enum(memory_type_str, GraphMemoryType) 2)j*jpf/jGk;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

868 if memory_type_str == "device": 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

869 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2)j*jpf;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

870 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2)j*jpf;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

871 alloc_params.poolProps.location.id = device_id 2)j*jpf;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

872 elif memory_type_str == "host": 2/j`f{f|f}f~fag

873 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED 2/j

874 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_HOST 2/j

875 alloc_params.poolProps.location.id = 0 2/j

876 elif memory_type_str == "managed": 2`f{f|f}f~fag

877 IF CUDA_CORE_BUILD_MAJOR >= 13: 

878 alloc_params.poolProps.allocType = cydriver.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_MANAGED 2`f{f|f}f~fag

879 alloc_params.poolProps.location.type = cydriver.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE 2`f{f|f}f~fag

880 alloc_params.poolProps.location.id = device_id 2`f{f|f}f~fag

881 ELSE: 

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

883  

884 if access_descs.size() > 0: 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

885 alloc_params.accessDescs = access_descs.data() 

886 alloc_params.accessDescCount = access_descs.size() 

887  

888 with nogil: 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

889 HANDLE_RETURN(cydriver.cuGraphAddMemAllocNode( 2)j*jpf/j;jpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

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

891  

892 return _registered(AllocNode._create_with_params( 2)j*jpfpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

893 create_graph_node_handle(new_node, h_graph), alloc_params.dptr, size, 2)j*jpfpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

894 device_id, memory_type_str, tuple(peer_ids))) 2)j*jpfpjqjrj]i$dsjMe^itjAfBfCfDfEfc d e f HbIbJbKbujvjwjfdgdhd_i`fOePeQeFf]bQ fcgchcic`i{fReSeTeGf^bR jckclcmc{i%dxjUe|iyj}i'dzjVe~iAjaj|fWeXeYeHf_bS ncocpcqcbj}fZe0e1eIf`bT rcsctcuccj~f2e3e4eJf{bU vcwcxcycdjag5e6e7eKf|bV zcAcBcCcej(dBj8efjCjgj)dDj9ehjEjij*dFj!ejjGjjdbgHj#e$e8b[bIj)eLfW GcJj*eMfX HcgbufvfNfwfIcJc;cY KcLcMcKj+eOfZ NcLj,ePf0 OcMj-eQf1 PcNj.eRf2 Qc/eC ~bac[cbchbibsb3 jbkblbOj:eSf4 RcO |c}c~cMbNbA ObPbQbPj;eTf5 ScQj=eUf6 Tc0bo M Rj?eVf7 Uca u v w g h i j s xbybzbE F q G H Sj@eWf8 VcTj[eXf9 WcUj]eYf! XcVj^eZf# Ycmbxfyf0fzfZc0c=c$ 1c2c3cWj_e1f% 4cXj`e2f' 5cYj{e3f( 6cZj|e4f) 7c}eD ccdc]cecnbobtb* pbqbrb0j~e5f+ 8cP adbdcdRbSbB TbUbVb1jaf6f, 9c2jbf7f- !c1bp N 3jcf8f. #cb x y z k l m n t AbBbCbI J r K L 4jdf9f/ $c5jef!f: %c6jff#f; 'c7jgf$f= (c8jhf%f? )c9jif'f@ *c!jjf(f[ +c#jkf)f] ,c$jlf*f^ -c%jmf+f_ .c'jnf,f` /c

895  

896  

897cdef inline FreeNode GN_free(GraphNode self, cydriver.CUdeviceptr c_dptr): 

898 cdef cydriver.CUgraphNode new_node = NULL 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

899 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

900 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

901 cdef cydriver.CUgraphNode* deps = NULL 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

902 cdef size_t num_deps = 0 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

903  

904 GN_check_valid(self) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

905 if pred_node != NULL: 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

906 deps = &pred_node 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKf8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

907 num_deps = 1 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKf8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

908  

909 with nogil: 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

910 HANDLE_RETURN(cydriver.cuGraphAddMemFreeNode( 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKfsm8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

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

912  

913 return _registered(FreeNode._create_with_params(create_graph_node_handle(new_node, h_graph), c_dptr)) 2pfAfBfCfDfEfc d e f HbIbJbKbFfGfHfIfJfKf8bLfMfNfOfPfQfRf[cSfO |c}c~cMbNbA ObPbQbTfUf0bVfWfXfYfZf0f1f2f3f4f]c5fP adbdcdRbSbB TbUbVb6f7f1b8f9f!f#f$f%f'f(f)f*f+f,f

914  

915  

916cdef inline OpaqueHandle _buffer_attachment_owner(Buffer buf, str label): 

917 """Copy a Buffer's device-pointer handle into an attachment owner.""" 

918 Buffer_check_open(buf) 2ub(b/dom:d;d=dtmmdEe/f:ffnhn_f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

919 # The local is required: Cython permits the DevicePtrHandle -> OpaqueHandle 

920 # conversion on assignment, but not directly in a return statement. 

921 cdef OpaqueHandle attachment_owner = buf._h_ptr 2ub(b/dom:d;d=dmdEe/f:f_f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

922 return attachment_owner 2ub(b/dom:d;d=dmdEe/f:f_f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

923  

924  

925cdef inline OpaqueHandle _resolve_memcpy_operand( 

926 object operand, object owner, str side, 

927 cydriver.CUdeviceptr* out_ptr) except *: 

928 """Resolve an operand to a pointer and optional attachment owner. 

929  

930 ``operand`` is a :class:`Buffer` or a raw integer address; its device 

931 pointer is written to ``out_ptr``. For a :class:`Buffer` operand, returns an 

932 owner that retains the underlying allocation (not the wrapper). For a raw 

933 pointer, returns an owner built from ``owner`` (or an empty handle when 

934 ``owner`` is ``None``). 

935  

936 Raises 

937 ------ 

938 ValueError 

939 If ``operand`` is a :class:`Buffer` and ``owner`` is not ``None``. 

940 If a :class:`Buffer` operand or ``*_owner`` has no active allocation. 

941 """ 

942 cdef Buffer buf 

943 cdef OpaqueHandle attachment_owner 

944  

945 if isinstance(operand, Buffer): 2c d e f HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgqfidub(b/dNoom:d;d=dtmmdEe/f:ffnhn_f| Fc?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{ W GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c

946 if owner is not None: 2ub/dNoom:d;d=dmd/f:fhn?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

947 raise ValueError( 2Noom

948 f"{side}_owner cannot be used when {side} is a Buffer" 2Noom

949 ) 

950 buf = operand 2ub/dom:d;d=dmd/f:fhn?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

951 attachment_owner = _buffer_attachment_owner(buf, side) 2ub/dom:d;d=dmd/f:fhn?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

952 out_ptr[0] = as_cu(buf._h_ptr) 2ub/dom:d;d=dmd/f:f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

953 return attachment_owner 2ub/dom:d;d=dmd/f:f?d@d[d;f=f+d,d-d-f.f)b*b+bkdld`d?f{d|d}d@f[f~daebe]f^fcede.dvbwb{

954 out_ptr[0] = <cydriver.CUdeviceptr><uintptr_t>operand 2c d e f HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgqfid(btmmdEefn_f| Fc+d,d-d-f.fW GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c

955 if owner is None: 2c d e f HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgqfid(btmmdEefn_f| FcW GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c

956 return OpaqueHandle() 2c d e f HbIbJbKbQ fcgchcicR jckclcmcS ncocpcqcT rcsctcucU vcwcxcycV zcAcBcCcbgtm| FcW GcX HcY KcZ Nc0 Oc1 Pc2 Qc3 jb4 RcA Ob5 Sc6 Tco M 7 Uca u v w g h i j s xbybzbE F q G H 8 Vc9 Wc! Xc# Yc$ 1c% 4c' 5c( 6c) 7c* pb+ 8cB Tb, 9c- !cp N . #cb x y z k l m n t AbBbCbI J r K L / $c: %c; 'c= (c? )c@ *c[ +c] ,c^ -c_ .c` /c

957 if isinstance(owner, Buffer): 2qfid(btmmdEefn_f

958 return _buffer_attachment_owner(owner, f"{side}_owner") 2(btmmdEefn_f

959 return make_opaque_py(owner) 2qfid

960  

961  

962cdef inline MemsetNode GN_memset( 

963 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner, 

964 unsigned int val, unsigned int elem_size, 

965 size_t width, size_t height, size_t pitch): 

966 cdef cydriver.CUgraphNode new_node = NULL 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

967 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

968 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

969 cdef cydriver.CUgraphNode* deps = NULL 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

970 cdef size_t num_deps = 0 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

971 cdef PreparedAttachment prepared 

972  

973 GN_check_valid(self) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

974 if pred_node != NULL: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

975 deps = &pred_node 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc| FcGcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

976 num_deps = 1 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc| FcGcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

977  

978 cdef cydriver.CUcontext ctx = NULL 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

979 with nogil: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

980 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

981  

982 cdef cydriver.CUDA_MEMSET_NODE_PARAMS memset_params = cydriver.CUDA_MEMSET_NODE_PARAMS( 

983 dst=c_dst, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

984 pitch=pitch, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

985 value=val, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

986 elementSize=elem_size, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

987 width=width, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

988 height=height, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

989 ) 

990  

991 if dst_owner: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

992 HANDLE_RETURN(graph_prepare_attachment( 2/f:f_f;f=f-f.fkdld?f@f[f]f^fvbwb{

993 h_graph, dst_owner, OpaqueHandle(), &prepared)) 

994  

995 with nogil: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

996 HANDLE_RETURN(cydriver.cuGraphAddMemsetNode( 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

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

998 &memset_params, ctx)) 

999  

1000 if dst_owner: 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

1001 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2/f:f_f;f=f-f.fkdld?f@f[f]f^fvbwb{

1002  

1003 return _registered(MemsetNode._create_with_params( 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

1004 create_graph_node_handle(new_node, h_graph), c_dst, 2c d e f HbIbJbKbfcgchcicjckclcmcncocpcqcrcsctcucvcwcxcyczcAcBcCc/f:f_f| Fc;f=f-f.fkdld?f@f[f]f^fvbwb{ GcHcKcNcOcPcQcjbRcObScTcM Ucs xbybzbE F q G H VcWcXcYc1c4c5c6c7cpb8cTb9c!cN #ct AbBbCbI J r K L $c%c'c(c)c*c+c,c-c.c/c

1005 val, elem_size, width, height, pitch)) 

1006  

1007  

1008cdef cydriver.CUmemorytype _get_memcpy_memory_type( 

1009 cydriver.CUdeviceptr ptr) except *: 

1010 cdef unsigned int memory_type = cydriver.CU_MEMORYTYPE_DEVICE 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1011 cdef cydriver.CUresult ret 

1012 with nogil: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1013 ret = cydriver.cuPointerGetAttribute( 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1014 &memory_type, 

1015 cydriver.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

1016 ptr) 

1017 if ret != cydriver.CUDA_SUCCESS and ret != cydriver.CUDA_ERROR_INVALID_VALUE: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1018 HANDLE_RETURN(ret) 

1019 return <cydriver.CUmemorytype>memory_type 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1020  

1021  

1022cdef void _init_memcpy_params( 

1023 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, size_t size, 

1024 cydriver.CUDA_MEMCPY3D* params, cydriver.CUmemorytype* dst_type, 

1025 cydriver.CUmemorytype* src_type) except *: 

1026 dst_type[0] = _get_memcpy_memory_type(dst) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1027 src_type[0] = _get_memcpy_memory_type(src) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1028  

1029 c_memset(params, 0, sizeof(params[0])) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1030 params.srcMemoryType = src_type[0] 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1031 params.dstMemoryType = dst_type[0] 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1032 if src_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1033 params.srcHost = <void*><uintptr_t>src 2ub?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{

1034 else: 

1035 params.srcDevice = src 2c d e f Q R S T U V qfid(b/d:d;d=dmdEeW X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1036 if dst_type[0] == cydriver.CU_MEMORYTYPE_HOST: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1037 params.dstHost = <void*><uintptr_t>dst 2ub?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{

1038 else: 

1039 params.dstDevice = dst 2c d e f Q R S T U V qfid(b/d:d;d=dmdEeW X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1040 params.WidthInBytes = size 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1041 params.Height = 1 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1042 params.Depth = 1 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1043  

1044  

1045cdef inline MemcpyNode GN_memcpy( 

1046 GraphNode self, cydriver.CUdeviceptr c_dst, OpaqueHandle dst_owner, 

1047 cydriver.CUdeviceptr c_src, OpaqueHandle src_owner, size_t size): 

1048 cdef cydriver.CUDA_MEMCPY3D params 

1049 cdef cydriver.CUmemorytype c_dst_type 

1050 cdef cydriver.CUmemorytype c_src_type 

1051 _init_memcpy_params( 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1052 c_dst, c_src, size, &params, &c_dst_type, &c_src_type) 

1053  

1054 cdef cydriver.CUgraphNode new_node = NULL 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1055 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1056 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1057 cdef cydriver.CUgraphNode* deps = NULL 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1058 cdef size_t num_deps = 0 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1059 cdef PreparedAttachment prepared 

1060  

1061 GN_check_valid(self) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1062 if pred_node != NULL: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1063 deps = &pred_node 1cdefQRSTUVWXYZ01234A56o7auvwghijq89!#$%'()*+B,-p.bxyzklmnr/:;=?@[]^_`

1064 num_deps = 1 1cdefQRSTUVWXYZ01234A56o7auvwghijq89!#$%'()*+B,-p.bxyzklmnr/:;=?@[]^_`

1065  

1066 cdef cydriver.CUcontext ctx = NULL 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1067 if dst_owner or src_owner: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1068 HANDLE_RETURN(graph_prepare_attachment( 2qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{

1069 h_graph, dst_owner, src_owner, &prepared)) 

1070  

1071 with nogil: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1072 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1073 HANDLE_RETURN(cydriver.cuGraphAddMemcpyNode( 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

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

1075  

1076 if dst_owner or src_owner: 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1077 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{

1078  

1079 return _registered(MemcpyNode._create_with_params( 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1080 create_graph_node_handle(new_node, h_graph), c_dst, c_src, size, 2c d e f Q R S T U V qfidub(b/d:d;d=dmdEe?d@d[d+d,d-d)b*b+b`d{d|d}d~daebecede.dvbwb{ W X Y Z 0 1 2 3 4 A 5 6 o 7 a u v w g h i j q 8 9 ! # $ % ' ( ) * + B , - p . b x y z k l m n r / : ; = ? @ [ ] ^ _ `

1081 c_dst_type, c_src_type)) 

1082  

1083  

1084cdef inline ChildGraphNode GN_embed(GraphNode self, GraphDefinition child_def): 

1085 cdef cydriver.CUgraphNode new_node = NULL 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1086 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1087 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1088 cdef cydriver.CUgraphNode* deps = NULL 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1089 cdef size_t num_deps = 0 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1090 cdef cydriver.CUresult rollback_status 

1091  

1092 GN_check_valid(self) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1093 GD_check_valid(child_def) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1094 if pred_node != NULL: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1095 deps = &pred_node 2nd

1096 num_deps = 1 2nd

1097  

1098 with nogil: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1099 HANDLE_RETURN(cydriver.cuGraphAddChildGraphNode( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

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

1101  

1102 cdef cydriver.CUgraph embedded_graph = NULL 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1103 cdef GraphHandle h_embedded 

1104 try: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1105 with nogil: 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1106 HANDLE_RETURN(cydriver.cuGraphChildGraphNodeGetGraph( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1107 new_node, &embedded_graph)) 

1108 h_embedded = create_child_graph_handle( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1109 embedded_graph, h_graph, new_node) 

1110 HANDLE_RETURN(graph_clone_attachments( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1111 h_embedded, child_def._h_graph)) 

1112 except: 

1113 with nogil: 

1114 rollback_status = cydriver.cuGraphDestroyNode(new_node) 

1115 if rollback_status == cydriver.CUDA_SUCCESS: 

1116 invalidate_child_graph_state(h_graph, new_node) 

1117 raise 

1118  

1119 return _registered(ChildGraphNode._create_with_params( 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1120 create_graph_node_handle(new_node, h_graph), h_embedded)) 2Nesdtdudvdwdxdyd}b^ckjDcof_c@b{c`czdnddg%eegBd'e(eDdEdgbFd9b!b#b} ~ abbbGdHdIdC JdO KdLdMdNda s OdPdQdRdmbSd$b%b'bcbdbebfbTdUdVdD WdP XdYdZd0db t 1d2d3d4d5d6d7d8d9d!d#d

1121  

1122  

1123cdef inline EventRecordNode GN_record_event(GraphNode self, Event ev): 

1124 GN_check_valid(self) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1125 Event_check_open(ev) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1126 cdef cydriver.CUgraphNode new_node = NULL 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1127 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1128 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1129 cdef cydriver.CUgraphNode* deps = NULL 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1130 cdef size_t num_deps = 0 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1131 cdef PreparedAttachment prepared 

1132  

1133 if pred_node != NULL: 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1134 deps = &pred_node 2PeSeXe0e3e6e#esf8bubddwgpdxg?czgqdAgrd

1135 num_deps = 1 2PeSeXe0e3e6e#esf8bubddwgpdxg?czgqdAgrd

1136  

1137 cdef OpaqueHandle owner = ev._h_event 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1138 HANDLE_RETURN(graph_prepare_attachment( 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1139 h_graph, owner, OpaqueHandle(), &prepared)) 

1140  

1141 with nogil: 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1142 HANDLE_RETURN(cydriver.cuGraphAddEventRecordNode( 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

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

1144  

1145 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1146  

1147 return _registered(EventRecordNode._create_with_params( 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1148 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2sgPeSeXe0e3e6e5k#e6ktgugrfsf8bubddwgpdxg?czgqdAgrd:k?kuf]k9b`k}kbl~belXiYieefegehe|chlklFenlu xbqltlwlzlxfCl$bFlIlLlccOl$i%iqereseteadRlUlIeXlx Ab0l3l6l9l$l(l+l.l;l@l^l

1149  

1150  

1151cdef inline EventWaitNode GN_wait_event(GraphNode self, Event ev): 

1152 GN_check_valid(self) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1153 Event_check_open(ev) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1154 cdef cydriver.CUgraphNode new_node = NULL 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1155 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1156 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1157 cdef cydriver.CUgraphNode* deps = NULL 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1158 cdef size_t num_deps = 0 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1159 cdef PreparedAttachment prepared 

1160  

1161 if pred_node != NULL: 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1162 deps = &pred_node 2sgQeTeYe1e4e7etgug$erf

1163 num_deps = 1 2sgQeTeYe1e4e7etgug$erf

1164  

1165 cdef OpaqueHandle owner = ev._h_event 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1166 HANDLE_RETURN(graph_prepare_attachment( 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1167 h_graph, owner, OpaqueHandle(), &prepared)) 

1168  

1169 with nogil: 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1170 HANDLE_RETURN(cydriver.cuGraphAddEventWaitNode( 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

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

1172  

1173 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1174  

1175 return _registered(EventWaitNode._create_with_params( 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1176 create_graph_node_handle(new_node, h_graph), ev._h_event)) 2sgQeTeYe1e4e7etgug$e7krfsfpdyg@cqdrd;k@kvf^k!b{k~kclacflXiZiiejekele}cilllGeolv ybrlulxlAlyfDl%bGlJlMldcPl$i'iuevewexebdSlVlJeYly Bb1l4l7l!l%l)l,l/l=l[l_l

1177  

1178  

1179cdef inline HostCallbackNode GN_callback(GraphNode self, object fn, object user_data): 

1180 cdef cydriver.CUDA_HOST_NODE_PARAMS node_params 

1181 cdef cydriver.CUgraphNode new_node = NULL 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1182 cdef GraphHandle h_graph = graph_node_get_graph(self._h_node) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1183 cdef cydriver.CUgraphNode pred_node = as_cu(self._h_node) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1184 cdef cydriver.CUgraphNode* deps = NULL 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1185 cdef size_t num_deps = 0 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1186 cdef OpaqueHandle fn_owner, data_owner 

1187 cdef PreparedAttachment prepared 

1188  

1189 GN_check_valid(self) 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1190 if pred_node != NULL: 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1191 deps = &pred_node 2(b[bpdyg@cqdrd

1192 num_deps = 1 2(b[bpdyg@cqdrd

1193  

1194 _resolve_host_callback( 2IkJkKkLkMkCmDmEmFmNkNeGmOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1195 fn, user_data, &node_params.fn, &node_params.userData, 

1196 &fn_owner, &data_owner) 

1197 HANDLE_RETURN(graph_prepare_attachment( 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1198 h_graph, fn_owner, data_owner, &prepared)) 

1199  

1200 with nogil: 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1201 HANDLE_RETURN(cydriver.cuGraphAddHostNode( 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

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

1203  

1204 HANDLE_RETURN(graph_commit_attachment(prepared, new_node)) 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1205  

1206 cdef object callable_obj = fn if not isinstance(fn, ct._CFuncPtr) else None 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1207 return _registered(HostCallbackNode._create_with_params( 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1208 create_graph_node_handle(new_node, h_graph), callable_obj, 2IkJkKkLkMkNkNeOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k,j-j3k4k^cDcofWbXbYbZb3b4b5b6b(b_c.j{c8k`czd9k[bdgAdHk%ewgpd!k#kegxgyg$k%kBd?c@cLiMi'k'ezgqd(k)k*k(eAgrd+k,kmjCd-k.knjoj/k=k[kwf_k#b|kaldlbcglYiZi~cjlmeneoepemlHeplw zbslvlylBlzfEl'bHlKlNlecQl%i'icdTlyezeAeBeWlKeZlz Cb2l5l8l#l'l*l-l:l?l]l`l

1209 node_params.fn, node_params.userData))