Coverage for cuda/core/graph/_graph_definition.pyx: 95.42%

131 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"""GraphDefinition: explicit CUDA graph definition.""" 

6  

7from __future__ import annotations 

8  

9from libc.stddef cimport size_t 

10from libc.stdint cimport uintptr_t 

11  

12from libcpp.vector cimport vector 

13  

14from cuda.bindings cimport cydriver 

15  

16from cuda.core.graph._graph_node cimport GraphNode 

17from cuda.core._resource_handles cimport ( 

18 GraphHandle, 

19 as_cu, 

20 as_intptr, 

21 as_py, 

22 create_graph_handle, 

23 create_graph_node_handle, 

24) 

25from cuda.core._utils.cuda_utils cimport HANDLE_RETURN 

26  

27from typing import TYPE_CHECKING 

28  

29from cuda.core._utils.cuda_utils import driver 

30  

31from cuda.core.typing import GraphMemoryType 

32  

33if TYPE_CHECKING: 

34 from cuda.core._device import Device 

35 from cuda.core._event import Event 

36 from cuda.core._launch_config import LaunchConfig 

37 from cuda.core._memory._buffer import Buffer 

38 from cuda.core._module import Kernel 

39 from cuda.core.graph._graph_builder import ( 

40 Graph, 

41 GraphCompleteOptions, 

42 GraphDebugPrintOptions, 

43 ) 

44 from cuda.core.graph._subclasses import ( 

45 AllocNode, 

46 ChildGraphNode, 

47 EmptyNode, 

48 EventRecordNode, 

49 EventWaitNode, 

50 FreeNode, 

51 HostCallbackNode, 

52 IfElseNode, 

53 IfNode, 

54 KernelNode, 

55 MemcpyNode, 

56 MemsetNode, 

57 SwitchNode, 

58 WhileNode, 

59 ) 

60  

61__all__ = ['GraphCondition', 'GraphDefinition'] 

62  

63  

64cdef class GraphCondition: 

65 """A condition variable for conditional graph nodes. 

66  

67 Created by :meth:`GraphDefinition.create_condition` (or 

68 :meth:`GraphBuilder.create_condition`) and passed to 

69 conditional-node builder methods (:meth:`~GraphDefinition.if_then`, 

70 :meth:`~GraphDefinition.if_else`, :meth:`~GraphDefinition.while_loop`, 

71 :meth:`~GraphDefinition.switch`). The underlying value is set at 

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

73  

74 A :class:`GraphCondition` may be passed directly as a kernel 

75 argument to ``launch()``: the launcher unwraps it to the underlying 

76 ``CUgraphConditionalHandle`` value so device code can update the 

77 condition. 

78 """ 

79  

80 @staticmethod 

81 cdef GraphCondition _from_handle(cydriver.CUgraphConditionalHandle c_handle): 

82 cdef GraphCondition self = GraphCondition.__new__(GraphCondition) 2~dunYdvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m WnXn2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

83 self._c_handle = c_handle 2~dunYdvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m WnXn2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

84 return self 2~dunYdvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m WnXn2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

85  

86 def __repr__(self) -> str: 

87 return f"<GraphCondition handle=0x{<unsigned long long>self._c_handle:x}>" 2a b c d 6o

88  

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

90 if not isinstance(other, GraphCondition): 2gohoiojoneoe]fpeYnkolomonooopoqorosotouovowoxoyozoAoBoCoZnDoEoFoGoHodoeo

91 return NotImplemented 2YnkolomonooopoqorosotouovowoxoyozoAoBoCoZnDoEoFoGo

92 return self._c_handle == (<GraphCondition>other)._c_handle 2gohoiojoneoe]fpeYnHodoeo

93  

94 def __hash__(self) -> int: 

95 return hash(<unsigned long long>self._c_handle) 27o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?oIo@o[o]o^o_o`o{odoeo

96  

97 @property 

98 def handle(self) -> driver.CUgraphConditionalHandle: 

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

100 return <unsigned long long>self._c_handle 2~dunYdvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYn

101  

102  

103cdef class GraphDefinition: 

104 """A graph definition. 

105  

106 A GraphDefinition is used to construct a graph explicitly by adding nodes 

107 and specifying dependencies. Once construction is complete, call 

108 instantiate() to obtain an executable Graph. 

109  

110 Notes 

111 ----- 

112 Definitions that view the same root, child, or conditional graph hierarchy 

113 share underlying graph state. Mutations anywhere in that hierarchy must be 

114 externally synchronized. 

115 """ 

116  

117 def __init__(self): 

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

119 cdef cydriver.CUgraph graph = NULL 2PeQe|h}h~haibicio _dbeWddieifi0n^fgihiiivmsnReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e1n2n3e4e5e6e7ereseteue8e9e!e#e3nfngnhn$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRi4ndgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtd5n6n7n8nae9nZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDg2dEg'j(j)j!n*j5b6b+jFg,jwm7b8bGg-jHg3dIg.j/j:j#n;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPg4dQg^j_j`j$n{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSg5dTgakbkck%ndk.b/bekUgfkzm:b;bgkVg6dWghkikjk'nkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g7d3gokpkqk(nrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g8d%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g9d)gDkEkFk)nGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g!d=gKkLkMk*nNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g#d`gRkSkTk+nUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kah$dbh5k6k7k,n8kqcrc9kch!kGmsctc} #kdh%deh$k%k'k-n(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klh'dmh.k/k:k.n;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@koh(dph[k]k^k/n_kGcHc`kqh{kJmIcJc|krh)dsh}k~kal:nblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyh*dzhflglhl;nilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIh+dJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLh,dMhulvlwl=nxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUh-dVhBlClDl?nEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h.d2hIlJlKl@nLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h/d8hWlXlYl[nZl$c%c0l9h1lQm'c(cGb2l!h:d#h3l4l5l]n6l)c*c7l$h8lRm+c,c9l%h;d'h!l#l$l^n%l-c.c'l(h(lSm/c:c)l)h=d*h*l+l,l_n-l;c=c.l+h/lTm?c@c:l,h?d-h;l=l?l`n@l[c]c[l.h]lUm^c_c^l/h@d:h_l`l{l{n|l`c{c}l;h~lVm|c}cam=h[d?hbmcmdm|nem~cadfm@hgmWmbdcdhm[h]d]himjmkm}nlmddedmm^hnmXmfdgdom_h^d`hpmqmrm~nsmhdidtm{humYmjdkd

120 with nogil: 2PeQe|h}h~haibicio _dbeWddieifi0n^fgihiiivmsnReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e1n2n3e4e5e6e7ereseteue8e9e!e#e3nfngnhn$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRi4ndgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtd5n6n7n8nae9nZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDg2dEg'j(j)j!n*j5b6b+jFg,jwm7b8bGg-jHg3dIg.j/j:j#n;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPg4dQg^j_j`j$n{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSg5dTgakbkck%ndk.b/bekUgfkzm:b;bgkVg6dWghkikjk'nkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g7d3gokpkqk(nrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g8d%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g9d)gDkEkFk)nGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g!d=gKkLkMk*nNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g#d`gRkSkTk+nUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kah$dbh5k6k7k,n8kqcrc9kch!kGmsctc} #kdh%deh$k%k'k-n(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klh'dmh.k/k:k.n;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@koh(dph[k]k^k/n_kGcHc`kqh{kJmIcJc|krh)dsh}k~kal:nblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyh*dzhflglhl;nilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIh+dJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLh,dMhulvlwl=nxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUh-dVhBlClDl?nEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h.d2hIlJlKl@nLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h/d8hWlXlYl[nZl$c%c0l9h1lQm'c(cGb2l!h:d#h3l4l5l]n6l)c*c7l$h8lRm+c,c9l%h;d'h!l#l$l^n%l-c.c'l(h(lSm/c:c)l)h=d*h*l+l,l_n-l;c=c.l+h/lTm?c@c:l,h?d-h;l=l?l`n@l[c]c[l.h]lUm^c_c^l/h@d:h_l`l{l{n|l`c{c}l;h~lVm|c}cam=h[d?hbmcmdm|nem~cadfm@hgmWmbdcdhm[h]d]himjmkm}nlmddedmm^hnmXmfdgdom_h^d`hpmqmrm~nsmhdidtm{humYmjdkd

121 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2PeQe|h}h~haibicio _dbeWddieifi0n^fgihiiivmsnReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e1n2n3e4e5e6e7ereseteue8e9e!e#e3nfngnhn$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRi4ndgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtd5n6n7n8nae9nZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDg2dEg'j(j)j!n*j5b6b+jFg,jwm7b8bGg-jHg3dIg.j/j:j#n;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPg4dQg^j_j`j$n{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSg5dTgakbkck%ndk.b/bekUgfkzm:b;bgkVg6dWghkikjk'nkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g7d3gokpkqk(nrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g8d%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g9d)gDkEkFk)nGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g!d=gKkLkMk*nNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g#d`gRkSkTk+nUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kah$dbh5k6k7k,n8kqcrc9kch!kGmsctc} #kdh%deh$k%k'k-n(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klh'dmh.k/k:k.n;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@koh(dph[k]k^k/n_kGcHc`kqh{kJmIcJc|krh)dsh}k~kal:nblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyh*dzhflglhl;nilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIh+dJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLh,dMhulvlwl=nxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUh-dVhBlClDl?nEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h.d2hIlJlKl@nLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h/d8hWlXlYl[nZl$c%c0l9h1lQm'c(cGb2l!h:d#h3l4l5l]n6l)c*c7l$h8lRm+c,c9l%h;d'h!l#l$l^n%l-c.c'l(h(lSm/c:c)l)h=d*h*l+l,l_n-l;c=c.l+h/lTm?c@c:l,h?d-h;l=l?l`n@l[c]c[l.h]lUm^c_c^l/h@d:h_l`l{l{n|l`c{c}l;h~lVm|c}cam=h[d?hbmcmdm|nem~cadfm@hgmWmbdcdhm[h]d]himjmkm}nlmddedmm^hnmXmfdgdom_h^d`hpmqmrm~nsmhdidtm{humYmjdkd

122 self._h_graph = create_graph_handle(graph) 2PeQe|h}h~haibicio _dbeWddieifi0n^fgihiiivmsnReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e1n2n3e4e5e6e7ereseteue8e9e!e#e3nfngnhn$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRi4ndgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtd5n6n7n8nae9nZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDg2dEg'j(j)j!n*j5b6b+jFg,jwm7b8bGg-jHg3dIg.j/j:j#n;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPg4dQg^j_j`j$n{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSg5dTgakbkck%ndk.b/bekUgfkzm:b;bgkVg6dWghkikjk'nkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g7d3gokpkqk(nrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g8d%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g9d)gDkEkFk)nGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g!d=gKkLkMk*nNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g#d`gRkSkTk+nUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kah$dbh5k6k7k,n8kqcrc9kch!kGmsctc} #kdh%deh$k%k'k-n(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klh'dmh.k/k:k.n;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@koh(dph[k]k^k/n_kGcHc`kqh{kJmIcJc|krh)dsh}k~kal:nblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyh*dzhflglhl;nilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIh+dJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLh,dMhulvlwl=nxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUh-dVhBlClDl?nEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h.d2hIlJlKl@nLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h/d8hWlXlYl[nZl$c%c0l9h1lQm'c(cGb2l!h:d#h3l4l5l]n6l)c*c7l$h8lRm+c,c9l%h;d'h!l#l$l^n%l-c.c'l(h(lSm/c:c)l)h=d*h*l+l,l_n-l;c=c.l+h/lTm?c@c:l,h?d-h;l=l?l`n@l[c]c[l.h]lUm^c_c^l/h@d:h_l`l{l{n|l`c{c}l;h~lVm|c}cam=h[d?hbmcmdm|nem~cadfm@hgmWmbdcdhm[h]d]himjmkm}nlmddedmm^hnmXmfdgdom_h^d`hpmqmrm~nsmhdidtm{humYmjdkd

123  

124 @staticmethod 

125 cdef GraphDefinition _from_handle(GraphHandle h_graph): 

126 """Create a GraphDefinition from an existing GraphHandle (internal use).""" 

127 cdef GraphDefinition g = GraphDefinition.__new__(GraphDefinition) 2~dYd=f?f@faoo Td[fHbIbJbKbmeLbMbNbObinjnknlnmnnnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l OfUdLd`dMde f g h a b c d NdVdOdm PdQd{d1 CeXdldmd5b6b7b8b9b!b#b$b2 3 4 5 %b'b(b)bD E F G *b+b,b-b.b/b:b;b=b?b@b[bH I J K ]b^b_b`b6 7 8 9 ! # $ % ' ( ) * {b|b}b~b+ , - . / : ; = ? acbcccdc@ [ ] ^ ecfcgchcL M N O _ ` { | icjckclcmcncocpcqcrcsctc} ucvcwcxc~ abbbcbyczcAcBcP Q R S CcDcEcFcGcHcIcJcKcLcMcNcT U V W OcPcQcRcdbebfbgbhbibjbkblbmbnbobScTcUcVcpbqbrbsbtbubvbwbxbWcXcYcZcybzbAbBb0c1c2c3cX Y Z 0 CbDbEbFb4c5c6c7c8c9c!c#c$c%c'c(cGb)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd

128 g._h_graph = h_graph 2~dYd=f?f@faoo Td[fHbIbJbKbmeLbMbNbObinjnknlnmnnnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l OfUdLd`dMde f g h a b c d NdVdOdm PdQd{d1 CeXdldmd5b6b7b8b9b!b#b$b2 3 4 5 %b'b(b)bD E F G *b+b,b-b.b/b:b;b=b?b@b[bH I J K ]b^b_b`b6 7 8 9 ! # $ % ' ( ) * {b|b}b~b+ , - . / : ; = ? acbcccdc@ [ ] ^ ecfcgchcL M N O _ ` { | icjckclcmcncocpcqcrcsctc} ucvcwcxc~ abbbcbyczcAcBcP Q R S CcDcEcFcGcHcIcJcKcLcMcNcT U V W OcPcQcRcdbebfbgbhbibjbkblbmbnbobScTcUcVcpbqbrbsbtbubvbwbxbWcXcYcZcybzbAbBb0c1c2c3cX Y Z 0 CbDbEbFb4c5c6c7c8c9c!c#c$c%c'c(cGb)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd

129 return g 2~dYd=f?f@faoo Td[fHbIbJbKbmeLbMbNbObinjnknlnmnnnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l OfUdLd`dMde f g h a b c d NdVdOdm PdQd{d1 CeXdldmd5b6b7b8b9b!b#b$b2 3 4 5 %b'b(b)bD E F G *b+b,b-b.b/b:b;b=b?b@b[bH I J K ]b^b_b`b6 7 8 9 ! # $ % ' ( ) * {b|b}b~b+ , - . / : ; = ? acbcccdc@ [ ] ^ ecfcgchcL M N O _ ` { | icjckclcmcncocpcqcrcsctc} ucvcwcxc~ abbbcbyczcAcBcP Q R S CcDcEcFcGcHcIcJcKcLcMcNcT U V W OcPcQcRcdbebfbgbhbibjbkblbmbnbobScTcUcVcpbqbrbsbtbubvbwbxbWcXcYcZcybzbAbBb0c1c2c3cX Y Z 0 CbDbEbFb4c5c6c7c8c9c!c#c$c%c'c(cGb)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd

130  

131 def __repr__(self) -> str: 

132 return f"<GraphDefinition handle=0x{as_intptr(self._h_graph):x}>" 2OfLdTfa b c d NdOdPd{dkeyeMeNele|o

133  

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

135 if not isinstance(other, GraphDefinition): 2meneoepeinjnknlnmnnn`d1 tnJoKoLoMoNoOoZnPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5ofoboco

136 return NotImplemented 2tnJoKoLoMoNoOoZnPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o

137 return ( 2meneoepeinjnknlnmnnn`d1 tnfoboco

138 <uintptr_t>self._h_graph.get() 

139 == <uintptr_t>(<GraphDefinition>other)._h_graph.get() 2meneoepeinjnknlnmnnn`d1 tnfoboco

140 ) 

141  

142 def __hash__(self) -> int: 

143 return hash(<uintptr_t>self._h_graph.get()) 2`d}o~oapbpcpdpepIofpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypboco

144  

145 @property 

146 def is_valid(self) -> bool: 

147 """Whether this graph definition remains valid.""" 

148 return as_intptr(self._h_graph) != 0 2{dGg

149  

150 @property 

151 def _entry(self) -> GraphNode: 

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

153 GD_check_valid(self) 2PeYdQe|h}h~haibicio _dbeWddieifi^fgihiiivmReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRidgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtdZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDgEg'j(j)j*j5b6b+jFg,jwm7b8bGg-jHgIg.j/j:j;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPgQg^j_j`j{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSgTgakbkckdk.b/bekUgfkzm:b;bgkVgWghkikjkkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g3gokpkqkrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g)gDkEkFkGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g=gKkLkMkNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g`gRkSkTkUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kahbh5k6k7k8kqcrc9kch!kGmsctc} #kdheh$k%k'k(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klhmh.k/k:k;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@kohph[k]k^k_kGcHc`kqh{kJmIcJc|krhsh}k~kalblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyhzhflglhlilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIhJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLhMhulvlwlxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUhVhBlClDlEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h2hIlJlKlLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h8hWlXlYlZl$c%c0l9h1lQm'c(cGb2l!h#h3l4l5l6l)c*c7l$h8lRm+c,c9l%h'h!l#l$l%l-c.c'l(h(lSm/c:c)l)h*h*l+l,l-l;c=c.l+h/lTm?c@c:l,h-h;l=l?l@l[c]c[l.h]lUm^c_c^l/h:h_l`l{l|l`c{c}l;h~lVm|c}cam=h?hbmcmdmem~cadfm@hgmWmbdcdhm[h]himjmkmlmddedmm^hnmXmfdgdom_h`hpmqmrmsmhdidtm{humYmjdkd

154 cdef GraphNode n = GraphNode.__new__(GraphNode) 2PeYdQe|h}h~haibicio _dbeWddieifi^fgihiiivmReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRidgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtdZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDgEg'j(j)j*j5b6b+jFg,jwm7b8bGg-jHgIg.j/j:j;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPgQg^j_j`j{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSgTgakbkckdk.b/bekUgfkzm:b;bgkVgWghkikjkkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g3gokpkqkrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g)gDkEkFkGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g=gKkLkMkNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g`gRkSkTkUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kahbh5k6k7k8kqcrc9kch!kGmsctc} #kdheh$k%k'k(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klhmh.k/k:k;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@kohph[k]k^k_kGcHc`kqh{kJmIcJc|krhsh}k~kalblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyhzhflglhlilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIhJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLhMhulvlwlxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUhVhBlClDlEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h2hIlJlKlLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h8hWlXlYlZl$c%c0l9h1lQm'c(cGb2l!h#h3l4l5l6l)c*c7l$h8lRm+c,c9l%h'h!l#l$l%l-c.c'l(h(lSm/c:c)l)h*h*l+l,l-l;c=c.l+h/lTm?c@c:l,h-h;l=l?l@l[c]c[l.h]lUm^c_c^l/h:h_l`l{l|l`c{c}l;h~lVm|c}cam=h?hbmcmdmem~cadfm@hgmWmbdcdhm[h]himjmkmlmddedmm^hnmXmfdgdom_h`hpmqmrmsmhdidtm{humYmjdkd

155 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 2PeYdQe|h}h~haibicio _dbeWddieifi^fgihiiivmReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRidgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtdZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDgEg'j(j)j*j5b6b+jFg,jwm7b8bGg-jHgIg.j/j:j;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPgQg^j_j`j{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSgTgakbkckdk.b/bekUgfkzm:b;bgkVgWghkikjkkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g3gokpkqkrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g)gDkEkFkGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g=gKkLkMkNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g`gRkSkTkUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kahbh5k6k7k8kqcrc9kch!kGmsctc} #kdheh$k%k'k(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klhmh.k/k:k;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@kohph[k]k^k_kGcHc`kqh{kJmIcJc|krhsh}k~kalblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyhzhflglhlilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIhJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLhMhulvlwlxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUhVhBlClDlEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h2hIlJlKlLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h8hWlXlYlZl$c%c0l9h1lQm'c(cGb2l!h#h3l4l5l6l)c*c7l$h8lRm+c,c9l%h'h!l#l$l%l-c.c'l(h(lSm/c:c)l)h*h*l+l,l-l;c=c.l+h/lTm?c@c:l,h-h;l=l?l@l[c]c[l.h]lUm^c_c^l/h:h_l`l{l|l`c{c}l;h~lVm|c}cam=h?hbmcmdmem~cadfm@hgmWmbdcdhm[h]himjmkmlmddedmm^hnmXmfdgdom_h`hpmqmrmsmhdidtm{humYmjdkd

156 n._is_entry = True 2PeYdQe|h}h~haibicio _dbeWddieifi^fgihiiivmReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRidgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtdZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDgEg'j(j)j*j5b6b+jFg,jwm7b8bGg-jHgIg.j/j:j;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPgQg^j_j`j{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSgTgakbkckdk.b/bekUgfkzm:b;bgkVgWghkikjkkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g3gokpkqkrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g)gDkEkFkGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g=gKkLkMkNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g`gRkSkTkUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kahbh5k6k7k8kqcrc9kch!kGmsctc} #kdheh$k%k'k(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klhmh.k/k:k;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@kohph[k]k^k_kGcHc`kqh{kJmIcJc|krhsh}k~kalblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyhzhflglhlilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIhJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLhMhulvlwlxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUhVhBlClDlEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h2hIlJlKlLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h8hWlXlYlZl$c%c0l9h1lQm'c(cGb2l!h#h3l4l5l6l)c*c7l$h8lRm+c,c9l%h'h!l#l$l%l-c.c'l(h(lSm/c:c)l)h*h*l+l,l-l;c=c.l+h/lTm?c@c:l,h-h;l=l?l@l[c]c[l.h]lUm^c_c^l/h:h_l`l{l|l`c{c}l;h~lVm|c}cam=h?hbmcmdmem~cadfm@hgmWmbdcdhm[h]himjmkmlmddedmm^hnmXmfdgdom_h`hpmqmrmsmhdidtm{humYmjdkd

157 return n 2PeYdQe|h}h~haibicio _dbeWddieifi^fgihiiivmReSeTeUeVejikiliminiTdoiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e_f`f{fJdKdC piqirisi|f}ftiuiviwixiHbIbyi~fziAiBiCiJbKbDiEiagbgFiGiHiIiJiLbMbKicgLiMiNiOiNbObPiQiRidgSiTiUiViWiegXiYiZi0ifggg1i2i3i4i5iPbQb6ihg7i8i9i!iRbSb#i$iigjg%i'i(i)i*iTbUb+ikg,i-i.i/iVbWb:i;ilgmg=i?i@i[i]iXbYb^ing_i`i{i|iZb0b}i~iogpgajbjcjdjej1b2bfjqggjhjijjj3b4bkjljmjrgnjojpjqjrjsgsjtjujvjwjxjtgyjzjtdZdAjBjCj(eud)eDj*ew x y z i j k l ug+e,e-eUdLd.e`dMdTfe f g h a b c d EjFjGjvg/eHjIjJjKjLjMj:e;ewgNj=exg?eOjPjQj@e[eygRj]e^evewezgAgxeNdVd_eOd`em PdQdSjp q r s t TjUjVjWjn Xj{dv Yju Zjkeye0j1 {eze|e}e~eafbfcfdfefAeBeCe1j2j3j4j5j6j7j8j9j!jBgCgXd0d1dcedeeefegeheieje|d}dffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMe#jEfFf$jUfVfGfHfNeleOeIfJfWf%jDgEg'j(j)j*j5b6b+jFg,jwm7b8bGg-jHgIg.j/j:j;j9b!b=jJg?jxm#b$bXfKgLg@jMg2 3 NgOg[j4 5 ]jPgQg^j_j`j{j%b'b|jRg}jym(b)bYfZf0fD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b~jSgTgakbkckdk.b/bekUgfkzm:b;bgkVgWghkikjkkk=b?blkXgmkAm@b[bYgKf1f2fZg3fH I 4f0g1gJ K nk2g3gokpkqkrk]b^bsk4gtkBm_b`b5g6g6 7 8 9 7g! # $ % 5f8g9g!g' ( #guk) * vk$g%gwkxkykzk{b|bAk'gBkCm}b~b+ , - . / : ; = ? Ck(g)gDkEkFkGkacbcHk*gIkDmccdc+g,g-g.g/g@ [ 6f:g] ^ Jk;g=gKkLkMkNkecfcOk?gPkEmgchcLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk_g`gRkSkTkUkicjcVk{gWkFmkclcXk|g}gYkZk0k1kmcnc2k~g3kocpc4kahbh5k6k7k8kqcrc9kch!kGmsctc} #kdheh$k%k'k(kucvc)kfh*kHmwcxc#fghhh+kih~ abjhkh,kbbcb-klhmh.k/k:k;kyczc=knh?kImAcBc$f%f'fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc@kohph[k]k^k_kGcHc`kqh{kJmIcJc|krhsh}k~kalblKcLcclthdlKmMcNcuhMf(f)fvh*fT U +fwhxhV W elyhzhflglhlilOcPcjlAhklLmQcRcBhChdbebfbgbDhhbibjbkb,fEhFhGhlbmbHhllnbobmlIhJhnlolplqlScTcrlKhslMmUcVcpbqbrbsbtbubvbwbxbtlLhMhulvlwlxlWcXcylNhzlNmYcZcOhPhQhRhShybzb-fThAbBbAlUhVhBlClDlEl0c1cFlWhGlOm2c3cNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl1h2hIlJlKlLl4c5cMl3hNlPm6c7cOl4h5hPlQlRlSl8c9cTl6hUl!c#cVl7h8hWlXlYlZl$c%c0l9h1lQm'c(cGb2l!h#h3l4l5l6l)c*c7l$h8lRm+c,c9l%h'h!l#l$l%l-c.c'l(h(lSm/c:c)l)h*h*l+l,l-l;c=c.l+h/lTm?c@c:l,h-h;l=l?l@l[c]c[l.h]lUm^c_c^l/h:h_l`l{l|l`c{c}l;h~lVm|c}cam=h?hbmcmdmem~cadfm@hgmWmbdcdhm[h]himjmkmlmddedmm^hnmXmfdgdom_h`hpmqmrmsmhdidtm{humYmjdkd

158  

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

160 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

163  

164 See :meth:`GraphNode.allocate` for full documentation. 

165 """ 

166 return self._entry.allocate(size, device=device, memory_type=memory_type, peer_access=peer_access) 2|h}h~haibici_dbeWddieifi^fgihiiiWeXeYeZereseteue8e9e!e#e$e%e'e_f`f{frisi}ftiuiviyi~fziAiBiCiDiEibgFiGiHiKicgLiMiNiOiPiQiRidgSiTiUiViWiegXiYiZi0igg1i2i3i6ihg7i8i9i!i#i$ijg%i'i(i+ikg,i-i.i/i:i;img=i?i@i^ing_i`i{i|i}i~ipgajbjcjfjqggjhjijjjkjljmjrgnjojpjqjrjsgsjtjvjwjxjtgyjzjBjCj)eFjHjLju %jEg)jFg,j-jIg:jJg?jXfKgLg@jMg2 3 NgOg[j4 5 ]jQg`jRg}jvdodydpdBd~jTgckUgfkgkWgjkXgmkYgKf1f2fZg3fH I 4f0g1gJ K nk3gqk4gtk5f8g9g!g' ( #guk) * vk%gyk'gBkCk)gFk*gIk.g6f:gJk=gMk?gPkLf7f8f9fL M N O !f@g[g]g_ ` ^g{ | Qk`gTk{gWkXk}g0k~g3k4kbh7kch!k#keh'kfh*k#fghhh+kih~ abjhkh,kbbcb-kmh:knh?kCdrdFdsdId@kph^kqh{k|kshalthdluhMf(f)fvh*fT U +fwhxhV W elzhhlAhkl,fEhFhGhlbmbHhllnbobmlJhplKhsltlMhwlNhzlRh-fThAlVhDlWhGlNf.f/f:fX Y Z 0 ;fXhYhZhCbDb0hEbFbHl2hKl3hNlOl5hRl6hUlVl8hYl9h1l2l#h5l$h8l9l'h$l(h(l)l*h,l+h/l:l-h?l.h]l^l:h{l;h~lam?hdm@hgmhm]hkm^hnmom`hrm{hum

167  

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

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

170  

171 See :meth:`GraphNode.deallocate` for full documentation. 

172 """ 

173 return self._entry.deallocate(dptr) 2Aj

174  

175 def memset( 

176 self, 

177 dst: Buffer | int, 

178 value, 

179 size_t width, 

180 size_t height=1, 

181 size_t pitch=0, 

182 *, 

183 dst_owner=None, 

184 ) -> MemsetNode: 

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

186  

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

188 """ 

189 return self._entry.memset( 2vewezgAgxen v AeBeBgCg|d}dDeFeGeJeKeUfVfWf

190 dst, value, width, height=height, pitch=pitch, dst_owner=dst_owner 2vewezgAgxen v AeBeBgCg|d}dDeFeGeJeKeUfVfWf

191 ) 

192  

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

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

195  

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

197 """ 

198 return self._entry.launch(config, kernel, *args) 2Ydqe3e4e5e6e7epiqi|fagfgiglgog(ei j k l Ud;ewgNj=exg?eVdp q r s t n ~eafbf5j6j7jeefegegfhfifkfofpfqfHeyfzfAf#jGfIfDg+jHg=jXfNgPg|jYfZf0fD E F G ndAdSgekVglkKf4f2gsk5f$gAk(gHk+g,g-g.g/g@ [ 6f:g] ^ ;gOkLf!f_gVk|g2kah9kdh)k#fjhlh=k$f%f'fP Q R S qdHdoh`krhclMf+fyhjl,fIhrlLhylOhPhQhRhShybzb-fThAbBbUhFlNf;f1hMl4hTl7h0l!h7l%h'l)h.l,h[l/h}l=hfm[hmm_htm

199  

200 def empty(self) -> EmptyNode: 

201 """Add an entry-point empty node (no dependencies). 

202  

203 Returns 

204 ------- 

205 EmptyNode 

206 A new EmptyNode with no dependencies. 

207 """ 

208 return self._entry.join() 2PeQeB JdKdC ujZdTjUjVjWjXj{dYjZjHeLeleOeGg

209  

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

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

212  

213 Parameters 

214 ---------- 

215 *nodes : GraphNode 

216 Nodes to merge. 

217  

218 Returns 

219 ------- 

220 EmptyNode 

221 A new EmptyNode that depends on all input nodes. 

222 """ 

223 return self._entry.join(*nodes) 2^freseteue_f`f{f}f~fbgcgdgeggghgjgkgmgngpgqgrgsgtgp q r s t EgFgIgJgOgQgRgodpdTgUgWgXgYgKf1f2fZg3fH I 4f0g1gJ K 3g4g#g%g'g)g*g6f=g?gLf7f8f9fL M N O ^g`g{g}g~gbhchehfhkhmhnhrdsdphqhshthuhMf(f)fvh*fT U +fwhxhV W zhAhHhJhKhMhNh-fVhWhNf.f/f:fX Y Z 0 0h2h3h5h6h8h9h#h$h'h(h*h+h-h.h:h;h?h@h]h^h`h{h

224  

225 def memcpy(self, dst: Buffer | int, src: Buffer | int, size_t size, *, dst_owner=None, src_owner=None) -> MemcpyNode: 

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

227  

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

229 """ 

230 return self._entry.memcpy(dst, src, size, dst_owner=dst_owner, src_owner=src_owner) 2Dj.eMj:eOjPjQj@e[eygRj]e^ecfdfef8j9j!jheiejejfrfsftfBfCfDfEfFf$jUfVfWf

231  

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

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

234  

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

236 """ 

237 return self._entry.embed(child) 2Tdqe|fagfgiglgogUdLd`dMdTfNdVdOdPdQdke1 CeXdldmdDgHgXfPgYfZf0fD E F G ndSgVgKf2g5f$g(g+g;gLf!f_g|gahdh#flh$f%f'fP Q R S qdohrhMfyh,fIhLhOhUhNf;f1h4h7h!h%h)h,h/h=h[h_h

238  

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

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

241  

242 See :meth:`GraphNode.record` for full documentation. 

243 """ 

244 return self._entry.record(event) 20eEjGjvg/eJj'j.jKg^jYfwdakhk1fok5g6g6 7 8 9 8gwkDk,gKk7f@gRkYk5k$kgh.k$fDd[k}k(fflBhChdbebfbgbEhnlulPhBl.fXhIlPlWl3l!l*l;l_lbmimpm

245  

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

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

248  

249 See :meth:`GraphNode.wait` for full documentation. 

250 """ 

251 return self._entry.wait(event) 2IjKjze2j1dEeIe(j/jLg_jZfxdbkik2fpk5g7g! # $ % 9gxkEk-gLk8f[gSkZk6k%khh/k%fEd]k~k)fglBhDhhbibjbkbFholvlQhCl/fYhJlQlXl4l#l+l=l`lcmjmqm

252  

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

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

255  

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

257 """ 

258 return self._entry.callback(fn, user_data=user_data) 2ReSeTeUeVejikiliminiTdoi1e2ewixiIiJi4i5i)i*i[i]idjej*eug+e,e-eLdMdTfe f g h a b c d Nd_eOd`ePdQdSjkeye0j1 {eze|e}eCe1j3j4jXd0dcedeffldlfEemfnfufmdvfIewfxfLeMeHfNeleOeJf*j;jMg{j0fzddkkk3frk6g7g!gzk+ , - . Gk/gNk9f]gUk1k8k(kih;k'fGd_kbl*filChDhGhqlpbqbrbsbxlShEl:fZhLlSlZl6l%l-l@l|lemlmsm

259  

260 def create_condition(self, default_value: int | None = None) -> GraphCondition: 

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

262  

263 The returned :class:`GraphCondition` object is passed to conditional-node 

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

265 via ``cudaGraphSetConditional``. 

266  

267 Parameters 

268 ---------- 

269 default_value : int, optional 

270 The default value to assign to the condition. 

271 If None, no default is assigned. 

272  

273 Returns 

274 ------- 

275 GraphCondition 

276 A condition variable for controlling conditional execution. 

277 """ 

278 GD_check_valid(self) 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

279 cdef cydriver.CUgraphConditionalHandle c_handle 

280 cdef unsigned int flags = 0 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

281 cdef unsigned int default_val = 0 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

282  

283 if default_value is not None: 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

284 default_val = <unsigned int>default_value 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

285 flags = cydriver.CU_GRAPH_COND_ASSIGN_DEFAULT 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

286  

287 cdef cydriver.CUcontext ctx = NULL 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

288 with nogil: 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

289 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

290 HANDLE_RETURN(cydriver.cuGraphConditionalHandleCreate( 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

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

292  

293 return GraphCondition._from_handle(c_handle) 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd

294  

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

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

297  

298 See :meth:`GraphNode.if_then` for full documentation. 

299 """ 

300 return self._entry.if_then(condition) 2o IbMbQbUbYb2btdw i e a 6b!b3 'bE +b/b?bI ^b7 # ( |b, ; = ? bc[ fcM ` jcncrcvcabzcQ DcHcLcU PcebibmbTcqbvbwbxbXczb1cY Db5c9c%c*c.c=c]c{cadedid

301  

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

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

304  

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

306 """ 

307 return self._entry.if_else(condition) 2HbLbPbTbXb1bx j f b 5b9b2 %bD *b.b=bH ]b6 ! ' {b+ / : ; ac@ ecL _ icmcqcuc~ ycP CcGcKcT OcdbhblbScpbtbubvbWcyb0cX Cb4c8c$c)c-c;c[c`c~cddhd

308  

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

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

311  

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

313 """ 

314 return self._entry.while_loop(condition) 2KbObSbWb0b4bz l h d m 8b$b5 )bG -b;b[bK `b9 % * ~b. : ? dc^ hcO | lcpctc} xccbBcS FcJcNcW RcgbkbobVcsbubxbZcBb3c0 Fb7c#c(cGb,c:c@c_c}ccdgdkd

315  

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

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

318  

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

320 """ 

321 return self._entry.switch(condition, count) 2JbNbRbVbZb3budy k g c 7b#b4 (bF ,b:b@bJ _b8 $ ) }b- / = cc] gcN { kcocsc} wcbbAcR EcIcMcV QcfbjbnbUcrbtbwbYcAb2cZ Eb6c!c'cGb+c/c?c^c|cbdfdjd

322  

323 def instantiate(self, options: GraphCompleteOptions | None = None) -> Graph: 

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

325  

326 Parameters 

327 ---------- 

328 options : :obj:`~graph.GraphCompleteOptions`, optional 

329 Customizable dataclass for graph instantiation options. 

330  

331 Returns 

332 ------- 

333 Graph 

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

335 """ 

336 GD_check_valid(self) 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#efngnhn$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^evewexe_e`ep q r s t n {du keye1 {eze|e}e~eafbfcfdfefAeBeffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMeEfFfGfHfNeleOeIfJf

337 from cuda.core.graph._graph_builder import _instantiate_graph 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#efngnhn$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^evewexe_e`ep q r s t n u keye1 {eze|e}e~eafbfcfdfefAeBeffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMeEfFfGfHfNeleOeIfJf

338  

339 return _instantiate_graph(self, options) 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#efngnhn$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^evewexe_e`ep q r s t n u keye1 {eze|e}e~eafbfcfdfefAeBeffgfhfifjfDekfldlfEemfnfofpfqfrfsftfFeGeHeufmdvfIewfxfyfzfAfBfCfDfJeKeLeMeEfFfGfHfNeleOeIfJf

340  

341 def debug_dot_print(self, path: str, options: GraphDebugPrintOptions | None = None) -> None: 

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

343  

344 Parameters 

345 ---------- 

346 path : str 

347 File path for the DOT output. 

348 options : GraphDebugPrintOptions, optional 

349 Customizable options for the debug print. 

350 """ 

351 GD_check_valid(self) 2_dbeWd

352 from cuda.core.graph._graph_builder import GraphDebugPrintOptions 2_dbeWd

353  

354 cdef unsigned int flags = 0 2_dbeWd

355 if options is not None: 2_dbeWd

356 if not isinstance(options, GraphDebugPrintOptions): 2beWd

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

358 flags = options._to_flags() 2Wd

359  

360 cdef bytes path_bytes = path.encode('utf-8') 2_dWd

361 cdef const char* c_path = path_bytes 2_dWd

362 with nogil: 2_dWd

363 HANDLE_RETURN(cydriver.cuGraphDebugDotPrint(as_cu(self._h_graph), c_path, flags)) 2_dWd

364  

365 def nodes(self) -> set[GraphNode]: 

366 """Return all nodes in the graph. 

367  

368 Returns 

369 ------- 

370 set of GraphNode 

371 All nodes in the graph. 

372 """ 

373 GD_check_valid(self) 2~dYd=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%mon'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdw x y z i j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n {dv u 1 Xd0d1dcedeeefegeheieje|d}dldmd

374 cdef vector[cydriver.CUgraphNode] nodes_vec 

375 cdef size_t num_nodes = 0 2~dYd=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%mon'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdw x y z i j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd

376  

377 with nogil: 2~dYd=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%mon'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdw x y z i j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd

378 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), NULL, &num_nodes)) 2~dYd=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%mon'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdw x y z i j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd

379  

380 if num_nodes == 0: 2~dYd=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%mon'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdw x y z i j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd

381 return set() 2Ydonw x y z m Xdcedeeefegeheieje|d}d

382  

383 nodes_vec.resize(num_nodes) 2~d=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdi j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd

384 with nogil: 2~d=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdi j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd

385 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 2~d=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdi j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd

386  

387 return {GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes)} 2~d=f?f@fo TdB C [fZm0mme1m2m3m4mneoe5m6m7m8m9m!m]fpe#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenZdi j k l OfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd

388  

389 def edges(self) -> set[tuple[GraphNode, GraphNode]]: 

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

391  

392 Returns 

393 ------- 

394 set of tuple 

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

396 a dependency edge in the graph. 

397 """ 

398 GD_check_valid(self) 2PfQfpnqnRfSfrnB JdKdC p q r s t n v u

399 cdef vector[cydriver.CUgraphNode] from_nodes 

400 cdef vector[cydriver.CUgraphNode] to_nodes 

401 cdef size_t num_edges = 0 2PfQfpnqnRfSfrnB JdKdC p q r s t n v u

402  

403 with nogil: 2PfQfpnqnRfSfrnB JdKdC p q r s t n v u

404 IF CUDA_CORE_BUILD_MAJOR >= 13: 

405 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2PfQfpnqnRfSfrnB JdKdC p q r s t n v u

406 as_cu(self._h_graph), NULL, NULL, NULL, &num_edges)) 

407 ELSE: 

408 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

409 as_cu(self._h_graph), NULL, NULL, &num_edges)) 

410  

411 if num_edges == 0: 2PfQfpnqnRfSfrnB JdKdC p q r s t n v u

412 return set() 2pnqnrnJdKdv

413  

414 from_nodes.resize(num_edges) 2PfQfRfSfB JdKdC p q r s t n v u

415 to_nodes.resize(num_edges) 2PfQfRfSfB JdKdC p q r s t n v u

416 with nogil: 2PfQfRfSfB JdKdC p q r s t n v u

417 IF CUDA_CORE_BUILD_MAJOR >= 13: 

418 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2PfQfRfSfB JdKdC p q r s t n v u

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

420 ELSE: 

421 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

423  

424 return { 2PfQfRfSfB JdKdC p q r s t n v u

425 (GraphNode._create(self._h_graph, from_nodes[i]), 2PfQfRfSfB JdKdC p q r s t n v u

426 GraphNode._create(self._h_graph, to_nodes[i])) 2PfQfRfSfB JdKdC p q r s t n v u

427 for i in range(num_edges) 2PfQfRfSfB JdKdC p q r s t n v u

428 } 

429  

430 @property 

431 def handle(self) -> driver.CUgraph: 

432 """Return the underlying driver CUgraph handle.""" 

433 return as_py(self._h_graph) 2aosnugMde f g h vgwgxgygQdtn