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

131 statements  

« prev     ^ index     » next       coverage.py v7.16.0, created at 2026-09-03 02:41 +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~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m LnMn2d5b6b7b8b3d9b!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~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m LnMn2d5b6b7b8b3d9b!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~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m LnMn2d5b6b7b8b3d9b!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 Vo

88  

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

90 if not isinstance(other, GraphCondition): 2`n{n|n}nneoe=fpeNn~naobocodoeofogohoiojokolomonooopoqoroOnsotouovowo]n^n

91 return NotImplemented 2Nn~naobocodoeofogohoiojokolomonooopoqoroOnsotouovo

92 return self._c_handle == (<GraphCondition>other)._c_handle 2`n{n|n}nneoe=fpeNnwo]n^n

93  

94 def __hash__(self) -> int: 

95 return hash(<unsigned long long>self._c_handle) 2WoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(oxo)o*o+o,o-o.o/o]n^n

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~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNn

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`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd

120 with nogil: 2PeQe^h_h`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd

121 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2PeQe^h_h`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd

122 self._h_graph = create_graph_handle(graph) 2PeQe^h_h`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd

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:f?no Td;fHbIbJbKbmeLbMbNbOb}m~manbncndnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l LfUdLd`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:f?no Td;fHbIbJbKbmeLbMbNbOb}m~manbncndnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l LfUdLd`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:f?no Td;fHbIbJbKbmeLbMbNbOb}m~manbncndnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l LfUdLd`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}>" 2LfLdQfa b c d NdOdPd{dkeyeMeNele:o

133  

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

135 if not isinstance(other, GraphDefinition): 2meneoepe}m~manbncndn`d1 jnyozoAoBoCoDoOnEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUo_n@n[n

136 return NotImplemented 2jnyozoAoBoCoDoOnEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUo

137 return ( 2meneoepe}m~manbncndn`d1 jn_n@n[n

138 <uintptr_t>self._h_graph.get() 

139 == <uintptr_t>(<GraphDefinition>other)._h_graph.get() 2meneoepe}m~manbncndn`d1 jn_n@n[n

140 ) 

141  

142 def __hash__(self) -> int: 

143 return hash(<uintptr_t>self._h_graph.get()) 2`d;o=o?o@o[o]o^oxo_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnp@n[n

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{dCg

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`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd

154 cdef GraphNode n = GraphNode.__new__(GraphNode) 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd

155 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd

156 n._is_entry = True 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd

157 return n 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd

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`h{h|h_dbeWd}h~hai?fbicidiWeXeYeZereseteue8e9e!e#e$e%e'e@f[f]fmini_foipiqiti`fuiviwixiyizi|fAiBiCiFi}fGiHiIiJiKiLiMi~fNiOiPiQiRiagSiTiUiVicgWiXiYi1idg2i3i4i5i6i7ifg8i9i!i%igg'i(i)i*i+i,iig-i.i/i=ijg?i@i[i]i^i_ilg`i{i|iajmgbjcjdjejfjgjhjngijjjkjljmjognjojqjrjsjpgtjujwjxj)eAjCju 3jAg6jBg9j!jEg%jFg)jTfGgHg*jIg2 3 JgKg+j4 5 ,jMg/jNg=jvdodydpdBd?jPg]jQg`j{jSg~jTgckUgHfXfYfVgZfH I 0fWgXgJ K dkZggk0gjk1f4g5g6g' ( 7gkk) * lk9gok!grksk$gvk%gyk*g2f,gzk.gCk/gFkIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk[gJk]gMkNk_gQk`gTkUk|gXk}g0k1kah4kbh7k7fchdh8keh~ abfhgh9kbbcb!kih%kjh)kCdrdFdsdId*klh-kmh:k;koh@kph^kqhJf#f$frh%fT U 'fshthV W _kvh|kwhal(fAhBhChlbmbDhblnbobclFhflGhiljlIhmlJhplNh)fPhqlRhtlShwlKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlYhAlZhDlEl1hHl2hKlLl4hOl5hRlSl7hVl8hYlZl!h2l#h5l6l%h9l'h$l%l)h)l*h,l-l,h:l-h?l@l/h^l:h{l|l=ham?hdmem[hhm]hkm

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) 2vj

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( 2vewevgwgxen v AeBexgyg|d}dDeFeGeJeKeRfSf

190 dst, value, width, height=height, pitch=pitch, dst_owner=dst_owner 2vewevgwgxen v AeBexgyg|d}dDeFeGeJeKeRfSf

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) 2Ydqe3e4e5e6e7ekili^f{fbgeghgkg(ei j k l Ud;esgEj=etg?eVdp q r s t n ~eafbfVjWjXjeefegegflfmfnfHevfwfxf1jDfFfzg8jDg(jTfJgLg;jUfVfWfD E F G ndAdOg_jRgbkHf0fYgik1f8gqk#gxk'g(g)g*g+g@ [ 2f,g] ^ -gEkIf6f@gLk^gSk{gZk~g6k7ffhhh(k8f9f!fP Q R S qdHdkh/knh]kJf'fuh~k(fEhhlHholKhLhMhNhOhybzb)fPhAbBbQhvlKf-fXhCl0hJl3hQl6hXl9h4l$h#l(h+l+h=l.h`l;hcm@hjm

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 pjZdKjLjMjNjOj{dPjQjHeLeleOeCg

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`f|f}f~fagcgdgfgggigjglgmgngogpgp q r s t AgBgEgFgKgMgNgodpdPgQgSgTgUgHfXfYfVgZfH I 0fWgXgJ K Zg0g7g9g!g$g%g2f.g/gIf3f4f5fL M N O ?g[g]g_g`g|g}gahbhghihjhrdsdlhmhohphqhJf#f$frh%fT U 'fshthV W vhwhDhFhGhIhJh)fRhShKf*f+f,fX Y Z 0 WhYhZh1h2h4h5h7h8h!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) 2yj.e:eFjGjHj@e[eugIj]e^ecfdfefYjZj0jheiejehfofpfqfyfzfAfBfCf2jRfSf

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^f{fbgeghgkgUdLd`dMdQfNdVdOdPdQdke1 CeXdldmdzgDgTfLgUfVfWfD E F G ndOgRgHfYg1f8g#g'g-gIf6f@g^g{g~g7fhh8f9f!fP Q R S qdkhnhJfuh(fEhHhKhQhKf-fXh0h3h6h9h$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) 20ezjBjrg/e4j#jGg-jUfwd@j|jXfek1g2g6 7 8 9 4gmktk(gAk3f:gHkOkVk2kch#k8fDd+k=k#f`kxhyhdbebfbgbAhdlklLhrl*fThylFlMlTl0l7l'l.l[l}lfm

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) 2DjzeSj1dEeIe5j$jHg.jVfxd[j}jYffk1g3g! # $ % 5gnkuk)gBk4f;gIkPkWk3kdh$k9fEd,k?k$f{kxhzhhbibjbkbBhelllMhsl+fUhzlGlNlUl1l8l(l/l]l~lgm

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) 2ReSeTeUeVeeifigihiiiTdji1e2erisiDiEiZi0i#i$i:i;i}i~i*eqg+e,e-eLdMdQfe f g h a b c d Nd_eOd`ePdQdJjkeye1 {eze|e}eCeRjTjUjXd0dcedeffldifEejfkfrfmdsfIetfufLeMeEfNeleOeGf7j'jIg:jWfzd^jakZfhk2g3g6gpk+ , - . wk+gDk5f=gKkRkYk5keh'k!fGd.k[k%f}kyhzhChglpbqbrbsbnlOhul,fVhBlIlPlWl3l!l*l;l_lbmim

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#e`m{m|m$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~eafbfcfdfefAeBeffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMeBfCfDfEfNeleOeFfGf

337 from cuda.core.graph._graph_builder import _instantiate_graph 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e`m{m|m$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~eafbfcfdfefAeBeffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMeBfCfDfEfNeleOeFfGf

338  

339 return _instantiate_graph(self, options) 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e`m{m|m$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~eafbfcfdfefAeBeffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMeBfCfDfEfNeleOeFfGf

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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde 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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde 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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde 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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde 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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd

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

382  

383 nodes_vec.resize(num_nodes) 2~d.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde 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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde 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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde 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 ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde 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) 2MfNffngnOfPfhnB 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 2MfNffngnOfPfhnB JdKdC p q r s t n v u

402  

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

404 IF CUDA_CORE_BUILD_MAJOR >= 13: 

405 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2MfNffngnOfPfhnB 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: 2MfNffngnOfPfhnB JdKdC p q r s t n v u

412 return set() 2fngnhnJdKdv

413  

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

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

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

417 IF CUDA_CORE_BUILD_MAJOR >= 13: 

418 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2MfNfOfPfB 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 { 2MfNfOfPfB JdKdC p q r s t n v u

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

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

427 for i in range(num_edges) 2MfNfOfPfB 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) 2?ninqgMde f g h rgsgtgugQdjn