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

129 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-29 01:38 +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-dfm'dgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmA VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m GmHmGd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

83 self._c_handle = c_handle 2-dfm'dgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmA VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m GmHmGd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

84 return self 2-dfm'dgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmA VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m GmHmGd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

85  

86 def __repr__(self) -> str: 

87 return f"<GraphCondition handle=0x{<unsigned long long>self._c_handle:x}>" 2#d

88  

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

90 if not isinstance(other, GraphCondition): 2qnrnsntn=d?d+e@dGdNdpdIcJcqdrdsdtdR S udKcvdDdT U OdPdQdIdRdSdTdUdVdJdKd

91 return NotImplemented 2GdNdpdIcJcqdrdsdtdR S udKcvdDdT U OdPdQdIdRdSdTdUd

92 return self._c_handle == (<GraphCondition>other)._c_handle 2qnrnsntn=d?d+e@dGdVdJdKd

93  

94 def __hash__(self) -> int: 

95 return hash(<unsigned long long>self._c_handle) 21d2dwdmdndxdydzdAd$ % BdodCdHd' ( 3d4d5dMd6d7d8d9d!d$d%dJdKd

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-dfm'dgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmGd

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 2ImJmKmLmMmNmOmPmQm/g:g;gRm,e=g?gSmTmUmVmWm7 XmYmZm0m[d1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m@g[g-e.e]g^g_g`g{gVbWb|g/e}g~gahbhXbYbchdh:e;eehfhghhhihZb0bjh=ekhlhmhnh1b2bohphqh`m?erhshthuhvh@ewhxhyhzh[e]eAhBhChDhEh3b4bFh^eGhHhIhJh5b6bKhLh_e`eMhNhOhPhQh7b8bRh{eShThUhVh9b!bWhXh|e}eYhZh0h1h2h#b$b3h~e4h5h6h7h%b'b8h9hafbf!h#h$h%h'h(b)b(hcf)h*h+h,h*b+b-h.h/hdf:h;h=h?h@hef[h]h^h_h`h{hff|h}hEd{m|m}m~m*dan+d~haibi|dFd}dci~dp q r s e f g h gfaebeceWdde,dLdhfa b c d i j k l dieifiifeegihifegejfiihekfiejikilijekelfmileme]d^dmfnf_dXdYdneZdoem 0dnit u v w x oipiqirio siz y ti.d/d`d{duiofGdpfviwixiqfyi,b-bzirfAi6k.b/bBisf1dtfCiDiEi?lFi:b;bGiufHi7k=b?bBevfwfIixf8 9 yfzfJi! # KiAf2dBfLiMiNi@lOi@b[bPiCfQi8k]b^bCeDeEeB C D E wdmdndxdydzdAd$ % BdodCdHd' ( RiDf3dEfSiTiUi[lVi_b`bWiFfXi9k{b|bYiGf4dHfZi0i1i]l2i}b~b3iIf4i!kacbcJfpeFeGeKfHeF G IeLfMfH I 5iNf5dOf6i7i8i^l9iccdc!iPf#i#kecfcQfRf) * + , Sf- . / : JeTfUfVf; = Wf$i? @ XfKeMdLeYfZf0f1f[ ] 2fMe3f%i^ _ ` { | } ~ abbbcbdb'i4f6d5f(i)i*i_l+igchc,i6f-i$kicjc7f8f9f!f#febfbNe$fgbhb.i%f7d'f/i:i;i`l=ikclc?i(f@i%kmcncqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i-f8d.f]i^i_i{l`iocpc{i/f|i'kqcrc}i:f;f~iajbjcjsctcdj=fejucvcfj?f9d@fgjhjij|ljjwcxckj[flj(kyczcmbmj]f!d^fnjojpj}lqjAcBcrj_fsj)kCcDcSe`f{ftj|fnbob}f~fujpbqbvjagNdbgwjxjyj#lzjEcFcAjcgBj*kGcHcTeUeVeN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U CjdgOdegDjEjFj$lGjLcMcHjfgIj+kNcOcJjggPdhgKjLjMj%lNjPcQcOjigPj,kRcScjgreWeXekgYeV W ZelgmgX Y QjngQdogRjSjTj'lUjTcUcVjpgWj-kVcWcqgrgrbsbtbubsgvbwbxbyb0etgugvgzbAbwgXjBbCb1eseIdte2e3e4e5eZ 0 6eue7exg1 2 DbEbFbGbHbIbJbKbLbYjygRdzgZj0j1j(l2jXcYc3jAg4j.kZc0cBgCgDgEgFgMbNb8eGgObPb5jHgSdIg6j7j8j)l9j1c2c!jJg#j/k3c4cve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jOgTdPg%j'j(j*l)j5c6c*jQg+j:k7c8c,jRgSg-j.j/j:j9c!c;jTg=j#c$c?jUgUdVg@j[j]j+l^j%c'c_jWg`j;k(c)cUb{jXg#dYg|j}j~j~lak*c+cbkZgck=k,c-cdk0gVd1gekfkgk?khk.c/cik2gjk@k:c;ckk3g$d4glkmknkamok=c?cpk5gqk[k@c[crk6g%d7gsktkukbmvk]c^cwk8gxk]k_c`cyk9gJd!gzkAkBkCkDk{c|cEk#gFk^k}c~cGk$gKd%gHkIkJkKkLkadbdMk'gNk_kcdddOk(g(d)gPkQkRkbnSkedfdTk*gUk`kgdhdVk+g)d,gWkXkYkcnZkidjd0k-g1k{kkdld

120 with nogil: 2ImJmKmLmMmNmOmPmQm/g:g;gRm,e=g?gSmTmUmVmWm7 XmYmZm0m[d1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m@g[g-e.e]g^g_g`g{gVbWb|g/e}g~gahbhXbYbchdh:e;eehfhghhhihZb0bjh=ekhlhmhnh1b2bohphqh`m?erhshthuhvh@ewhxhyhzh[e]eAhBhChDhEh3b4bFh^eGhHhIhJh5b6bKhLh_e`eMhNhOhPhQh7b8bRh{eShThUhVh9b!bWhXh|e}eYhZh0h1h2h#b$b3h~e4h5h6h7h%b'b8h9hafbf!h#h$h%h'h(b)b(hcf)h*h+h,h*b+b-h.h/hdf:h;h=h?h@hef[h]h^h_h`h{hff|h}hEd{m|m}m~m*dan+d~haibi|dFd}dci~dp q r s e f g h gfaebeceWdde,dLdhfa b c d i j k l dieifiifeegihifegejfiihekfiejikilijekelfmileme]d^dmfnf_dXdYdneZdoem 0dnit u v w x oipiqirio siz y ti.d/d`d{duiofGdpfviwixiqfyi,b-bzirfAi6k.b/bBisf1dtfCiDiEi?lFi:b;bGiufHi7k=b?bBevfwfIixf8 9 yfzfJi! # KiAf2dBfLiMiNi@lOi@b[bPiCfQi8k]b^bCeDeEeB C D E wdmdndxdydzdAd$ % BdodCdHd' ( RiDf3dEfSiTiUi[lVi_b`bWiFfXi9k{b|bYiGf4dHfZi0i1i]l2i}b~b3iIf4i!kacbcJfpeFeGeKfHeF G IeLfMfH I 5iNf5dOf6i7i8i^l9iccdc!iPf#i#kecfcQfRf) * + , Sf- . / : JeTfUfVf; = Wf$i? @ XfKeMdLeYfZf0f1f[ ] 2fMe3f%i^ _ ` { | } ~ abbbcbdb'i4f6d5f(i)i*i_l+igchc,i6f-i$kicjc7f8f9f!f#febfbNe$fgbhb.i%f7d'f/i:i;i`l=ikclc?i(f@i%kmcncqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i-f8d.f]i^i_i{l`iocpc{i/f|i'kqcrc}i:f;f~iajbjcjsctcdj=fejucvcfj?f9d@fgjhjij|ljjwcxckj[flj(kyczcmbmj]f!d^fnjojpj}lqjAcBcrj_fsj)kCcDcSe`f{ftj|fnbob}f~fujpbqbvjagNdbgwjxjyj#lzjEcFcAjcgBj*kGcHcTeUeVeN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U CjdgOdegDjEjFj$lGjLcMcHjfgIj+kNcOcJjggPdhgKjLjMj%lNjPcQcOjigPj,kRcScjgreWeXekgYeV W ZelgmgX Y QjngQdogRjSjTj'lUjTcUcVjpgWj-kVcWcqgrgrbsbtbubsgvbwbxbyb0etgugvgzbAbwgXjBbCb1eseIdte2e3e4e5eZ 0 6eue7exg1 2 DbEbFbGbHbIbJbKbLbYjygRdzgZj0j1j(l2jXcYc3jAg4j.kZc0cBgCgDgEgFgMbNb8eGgObPb5jHgSdIg6j7j8j)l9j1c2c!jJg#j/k3c4cve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jOgTdPg%j'j(j*l)j5c6c*jQg+j:k7c8c,jRgSg-j.j/j:j9c!c;jTg=j#c$c?jUgUdVg@j[j]j+l^j%c'c_jWg`j;k(c)cUb{jXg#dYg|j}j~j~lak*c+cbkZgck=k,c-cdk0gVd1gekfkgk?khk.c/cik2gjk@k:c;ckk3g$d4glkmknkamok=c?cpk5gqk[k@c[crk6g%d7gsktkukbmvk]c^cwk8gxk]k_c`cyk9gJd!gzkAkBkCkDk{c|cEk#gFk^k}c~cGk$gKd%gHkIkJkKkLkadbdMk'gNk_kcdddOk(g(d)gPkQkRkbnSkedfdTk*gUk`kgdhdVk+g)d,gWkXkYkcnZkidjd0k-g1k{kkdld

121 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2ImJmKmLmMmNmOmPmQm/g:g;gRm,e=g?gSmTmUmVmWm7 XmYmZm0m[d1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m@g[g-e.e]g^g_g`g{gVbWb|g/e}g~gahbhXbYbchdh:e;eehfhghhhihZb0bjh=ekhlhmhnh1b2bohphqh`m?erhshthuhvh@ewhxhyhzh[e]eAhBhChDhEh3b4bFh^eGhHhIhJh5b6bKhLh_e`eMhNhOhPhQh7b8bRh{eShThUhVh9b!bWhXh|e}eYhZh0h1h2h#b$b3h~e4h5h6h7h%b'b8h9hafbf!h#h$h%h'h(b)b(hcf)h*h+h,h*b+b-h.h/hdf:h;h=h?h@hef[h]h^h_h`h{hff|h}hEd{m|m}m~m*dan+d~haibi|dFd}dci~dp q r s e f g h gfaebeceWdde,dLdhfa b c d i j k l dieifiifeegihifegejfiihekfiejikilijekelfmileme]d^dmfnf_dXdYdneZdoem 0dnit u v w x oipiqirio siz y ti.d/d`d{duiofGdpfviwixiqfyi,b-bzirfAi6k.b/bBisf1dtfCiDiEi?lFi:b;bGiufHi7k=b?bBevfwfIixf8 9 yfzfJi! # KiAf2dBfLiMiNi@lOi@b[bPiCfQi8k]b^bCeDeEeB C D E wdmdndxdydzdAd$ % BdodCdHd' ( RiDf3dEfSiTiUi[lVi_b`bWiFfXi9k{b|bYiGf4dHfZi0i1i]l2i}b~b3iIf4i!kacbcJfpeFeGeKfHeF G IeLfMfH I 5iNf5dOf6i7i8i^l9iccdc!iPf#i#kecfcQfRf) * + , Sf- . / : JeTfUfVf; = Wf$i? @ XfKeMdLeYfZf0f1f[ ] 2fMe3f%i^ _ ` { | } ~ abbbcbdb'i4f6d5f(i)i*i_l+igchc,i6f-i$kicjc7f8f9f!f#febfbNe$fgbhb.i%f7d'f/i:i;i`l=ikclc?i(f@i%kmcncqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i-f8d.f]i^i_i{l`iocpc{i/f|i'kqcrc}i:f;f~iajbjcjsctcdj=fejucvcfj?f9d@fgjhjij|ljjwcxckj[flj(kyczcmbmj]f!d^fnjojpj}lqjAcBcrj_fsj)kCcDcSe`f{ftj|fnbob}f~fujpbqbvjagNdbgwjxjyj#lzjEcFcAjcgBj*kGcHcTeUeVeN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U CjdgOdegDjEjFj$lGjLcMcHjfgIj+kNcOcJjggPdhgKjLjMj%lNjPcQcOjigPj,kRcScjgreWeXekgYeV W ZelgmgX Y QjngQdogRjSjTj'lUjTcUcVjpgWj-kVcWcqgrgrbsbtbubsgvbwbxbyb0etgugvgzbAbwgXjBbCb1eseIdte2e3e4e5eZ 0 6eue7exg1 2 DbEbFbGbHbIbJbKbLbYjygRdzgZj0j1j(l2jXcYc3jAg4j.kZc0cBgCgDgEgFgMbNb8eGgObPb5jHgSdIg6j7j8j)l9j1c2c!jJg#j/k3c4cve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jOgTdPg%j'j(j*l)j5c6c*jQg+j:k7c8c,jRgSg-j.j/j:j9c!c;jTg=j#c$c?jUgUdVg@j[j]j+l^j%c'c_jWg`j;k(c)cUb{jXg#dYg|j}j~j~lak*c+cbkZgck=k,c-cdk0gVd1gekfkgk?khk.c/cik2gjk@k:c;ckk3g$d4glkmknkamok=c?cpk5gqk[k@c[crk6g%d7gsktkukbmvk]c^cwk8gxk]k_c`cyk9gJd!gzkAkBkCkDk{c|cEk#gFk^k}c~cGk$gKd%gHkIkJkKkLkadbdMk'gNk_kcdddOk(g(d)gPkQkRkbnSkedfdTk*gUk`kgdhdVk+g)d,gWkXkYkcnZkidjd0k-g1k{kkdld

122 self._h_graph = create_graph_handle(graph) 2ImJmKmLmMmNmOmPmQm/g:g;gRm,e=g?gSmTmUmVmWm7 XmYmZm0m[d1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m@g[g-e.e]g^g_g`g{gVbWb|g/e}g~gahbhXbYbchdh:e;eehfhghhhihZb0bjh=ekhlhmhnh1b2bohphqh`m?erhshthuhvh@ewhxhyhzh[e]eAhBhChDhEh3b4bFh^eGhHhIhJh5b6bKhLh_e`eMhNhOhPhQh7b8bRh{eShThUhVh9b!bWhXh|e}eYhZh0h1h2h#b$b3h~e4h5h6h7h%b'b8h9hafbf!h#h$h%h'h(b)b(hcf)h*h+h,h*b+b-h.h/hdf:h;h=h?h@hef[h]h^h_h`h{hff|h}hEd{m|m}m~m*dan+d~haibi|dFd}dci~dp q r s e f g h gfaebeceWdde,dLdhfa b c d i j k l dieifiifeegihifegejfiihekfiejikilijekelfmileme]d^dmfnf_dXdYdneZdoem 0dnit u v w x oipiqirio siz y ti.d/d`d{duiofGdpfviwixiqfyi,b-bzirfAi6k.b/bBisf1dtfCiDiEi?lFi:b;bGiufHi7k=b?bBevfwfIixf8 9 yfzfJi! # KiAf2dBfLiMiNi@lOi@b[bPiCfQi8k]b^bCeDeEeB C D E wdmdndxdydzdAd$ % BdodCdHd' ( RiDf3dEfSiTiUi[lVi_b`bWiFfXi9k{b|bYiGf4dHfZi0i1i]l2i}b~b3iIf4i!kacbcJfpeFeGeKfHeF G IeLfMfH I 5iNf5dOf6i7i8i^l9iccdc!iPf#i#kecfcQfRf) * + , Sf- . / : JeTfUfVf; = Wf$i? @ XfKeMdLeYfZf0f1f[ ] 2fMe3f%i^ _ ` { | } ~ abbbcbdb'i4f6d5f(i)i*i_l+igchc,i6f-i$kicjc7f8f9f!f#febfbNe$fgbhb.i%f7d'f/i:i;i`l=ikclc?i(f@i%kmcncqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i-f8d.f]i^i_i{l`iocpc{i/f|i'kqcrc}i:f;f~iajbjcjsctcdj=fejucvcfj?f9d@fgjhjij|ljjwcxckj[flj(kyczcmbmj]f!d^fnjojpj}lqjAcBcrj_fsj)kCcDcSe`f{ftj|fnbob}f~fujpbqbvjagNdbgwjxjyj#lzjEcFcAjcgBj*kGcHcTeUeVeN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U CjdgOdegDjEjFj$lGjLcMcHjfgIj+kNcOcJjggPdhgKjLjMj%lNjPcQcOjigPj,kRcScjgreWeXekgYeV W ZelgmgX Y QjngQdogRjSjTj'lUjTcUcVjpgWj-kVcWcqgrgrbsbtbubsgvbwbxbyb0etgugvgzbAbwgXjBbCb1eseIdte2e3e4e5eZ 0 6eue7exg1 2 DbEbFbGbHbIbJbKbLbYjygRdzgZj0j1j(l2jXcYc3jAg4j.kZc0cBgCgDgEgFgMbNb8eGgObPb5jHgSdIg6j7j8j)l9j1c2c!jJg#j/k3c4cve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jOgTdPg%j'j(j*l)j5c6c*jQg+j:k7c8c,jRgSg-j.j/j:j9c!c;jTg=j#c$c?jUgUdVg@j[j]j+l^j%c'c_jWg`j;k(c)cUb{jXg#dYg|j}j~j~lak*c+cbkZgck=k,c-cdk0gVd1gekfkgk?khk.c/cik2gjk@k:c;ckk3g$d4glkmknkamok=c?cpk5gqk[k@c[crk6g%d7gsktkukbmvk]c^cwk8gxk]k_c`cyk9gJd!gzkAkBkCkDk{c|cEk#gFk^k}c~cGk$gKd%gHkIkJkKkLkadbdMk'gNk_kcdddOk(g(d)gPkQkRkbnSkedfdTk*gUk`kgdhdVk+g)d,gWkXkYkcnZkidjd0k-g1k{kkdld

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-d'd%e'e(eA )eVbWbXbYb:dZb0b1b2b,l-l.l/l:l;l3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bp q r s e f g h *eWd,dLda b c d i j k l XdYdZdm 0d,b-b.b/b:b;b=b?b8 9 ! # @b[b]b^bB C D E $ % ' ( _b`b{b|b}b~bacbcF G H I ccdcecfc) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbgchcicjcebfbgbhbkclcmcncJ K L M ibjbkblbocpcqcrcsctcucvcwcxcyczcmbAcBcCcDcnbobpbqbEcFcGcHcN O P Q R S T U LcMcNcOcPcQcRcScV W X Y TcUcVcWcrbsbtbubvbwbxbybzbAbBbCbZ 0 1 2 DbEbFbGbHbIbJbKbLbXcYcZc0cMbNbObPb1c2c3c4c3 4 5 6 QbRbSbTb5c6c7c8c9c!c#c$c%c'c(c)cUb*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdld

128 g._h_graph = h_graph 2-d'd%e'e(eA )eVbWbXbYb:dZb0b1b2b,l-l.l/l:l;l3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bp q r s e f g h *eWd,dLda b c d i j k l XdYdZdm 0d,b-b.b/b:b;b=b?b8 9 ! # @b[b]b^bB C D E $ % ' ( _b`b{b|b}b~bacbcF G H I ccdcecfc) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbgchcicjcebfbgbhbkclcmcncJ K L M ibjbkblbocpcqcrcsctcucvcwcxcyczcmbAcBcCcDcnbobpbqbEcFcGcHcN O P Q R S T U LcMcNcOcPcQcRcScV W X Y TcUcVcWcrbsbtbubvbwbxbybzbAbBbCbZ 0 1 2 DbEbFbGbHbIbJbKbLbXcYcZc0cMbNbObPb1c2c3c4c3 4 5 6 QbRbSbTb5c6c7c8c9c!c#c$c%c'c(c)cUb*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdld

129 return g 2-d'd%e'e(eA )eVbWbXbYb:dZb0b1b2b,l-l.l/l:l;l3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bp q r s e f g h *eWd,dLda b c d i j k l XdYdZdm 0d,b-b.b/b:b;b=b?b8 9 ! # @b[b]b^bB C D E $ % ' ( _b`b{b|b}b~bacbcF G H I ccdcecfc) * + , - . / : ; = ? @ [ ] ^ _ ` { | } ~ abbbcbdbgchcicjcebfbgbhbkclcmcncJ K L M ibjbkblbocpcqcrcsctcucvcwcxcyczcmbAcBcCcDcnbobpbqbEcFcGcHcN O P Q R S T U LcMcNcOcPcQcRcScV W X Y TcUcVcWcrbsbtbubvbwbxbybzbAbBbCbZ 0 1 2 DbEbFbGbHbIbJbKbLbXcYcZc0cMbNbObPb1c2c3c4c3 4 5 6 QbRbSbTb5c6c7c8c9c!c#c$c%c'c(c)cUb*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkdld

130  

131 def __repr__(self) -> str: 

132 return f"<GraphDefinition handle=0x{as_intptr(self._h_graph):x}>" 2~l

133  

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

135 if not isinstance(other, GraphDefinition): 2:d=d?d@d,l-l.l/l:l;l,dqf#l$l%l'l1eseIdte2e3e4e5eZ 0 6eue7exg1 2 (l)l*l+l?kCkKk

136 return NotImplemented 2qf#l$l%l'l1eseIdte2e3e4e5eZ 0 6eue7exg1 2 (l)l*l+l

137 return ( 2:d=d?d@d,l-l.l/l:l;l,dqf?kCkKk

138 <uintptr_t>self._h_graph.get() 

139 == <uintptr_t>(<GraphDefinition>other)._h_graph.get() 2:d=d?d@d,l-l.l/l:l;l,dqf?kCkKk

140 ) 

141  

142 def __hash__(self) -> int: 

143 return hash(<uintptr_t>self._h_graph.get()) 2,d?l@l[l]l^lXfKeMdLeYfZf0f1f[ ] 2fMe3f%i^ _ _l`l{l|l}lambmCkKk

144  

145 @property 

146 def _entry(self) -> GraphNode: 

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

148 cdef GraphNode n = GraphNode.__new__(GraphNode) 2'ddnenfngnhnA we.g;d/g:g;g,e=g?ginmn|kjn7 }k~kalbl[dcldlelflglhliljl2k3k4k5kklllmlnlolplqlcmdmemknln@g[g-e.e]g^g_g`g{gVbWb|g/e}g~gahbhXbYbchdh:e;eehfhghhhihZb0bjh=ekhlhmhnh1b2bohphqh?erhshthuhvh@ewhxhyhzh[e]eAhBhChDhEh3b4bFh^eGhHhIhJh5b6bKhLh_e`eMhNhOhPhQh7b8bRh{eShThUhVh9b!bWhXh|e}eYhZh0h1h2h#b$b3h~e4h5h6h7h%b'b8h9hafbf!h#h$h%h'h(b)b(hcf)h*h+h,h*b+b-h.h/hdf:h;h=h?h@hef[h]h^h_h`h{hff|h}hEd+d~haibi|dFd}dci~dp q r s e f g h gfaebeceWdde,dLdhfa b c d i j k l dieifiifeegihifegejfiihekfiejikilijekelfmileme]d^dmfnf_dXdYdneZdoem 0dnit u v w x oipiqirio siz y ti.d/d`d{duiofpfviwixiyi,b-bzirfAi6k.b/bBisftfCiDiEiFi:b;bGiufHi7k=b?bBevfwfIixf8 9 yfzfJi! # KiAfBfLiMiNiOi@b[bPiCfQi8k]b^bCeDeEeB C D E wdmdndxdydzdAd$ % BdodCdHd' ( RiDfEfSiTiUiVi_b`bWiFfXi9k{b|bYiGfHfZi0i1i2i}b~b3iIf4i!kacbcJfpeFeGeKfHeF G IeLfMfH I 5iNfOf6i7i8i9iccdc!iPf#i#kecfcQfRf) * + , Sf- . / : JeTfUfVf; = Wf$i? @ XfKeLeYfZf0f1f[ ] 2fMe3f%i^ _ ` { | } ~ abbbcbdb'i4f5f(i)i*i+igchc,i6f-i$kicjc7f8f9f!f#febfbNe$fgbhb.i%f'f/i:i;i=ikclc?i(f@i%kmcncqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i-f.f]i^i_i`iocpc{i/f|i'kqcrc}i:f;f~iajbjcjsctcdj=fejucvcfj?f@fgjhjijjjwcxckj[flj(kyczcmbmj]f^fnjojpjqjAcBcrj_fsj)kCcDcSe`f{ftj|fnbob}f~fujpbqbvjagbgwjxjyjzjEcFcAjcgBj*kGcHcTeUeVeN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U CjdgegDjEjFjGjLcMcHjfgIj+kNcOcJjgghgKjLjMjNjPcQcOjigPj,kRcScjgreWeXekgYeV W ZelgmgX Y QjngogRjSjTjUjTcUcVjpgWj-kVcWcqgrgrbsbtbubsgvbwbxbyb0etgugvgzbAbwgXjBbCb1esete2e3e4e5eZ 0 6eue7exg1 2 DbEbFbGbHbIbJbKbLbYjygzgZj0j1j2jXcYc3jAg4j.kZc0cBgCgDgEgFgMbNb8eGgObPb5jHgIg6j7j8j9j1c2c!jJg#j/k3c4cve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jOgPg%j'j(j)j5c6c*jQg+j:k7c8c,jRgSg-j.j/j:j9c!c;jTg=j#c$c?jUgVg@j[j]j^j%c'c_jWg`j;k(c)cUb{jXgYg|j}j~jak*c+cbkZgck=k,c-cdk0g1gekfkgkhk.c/cik2gjk@k:c;ckk3g4glkmknkok=c?cpk5gqk[k@c[crk6g7gsktkukvk]c^cwk8gxk]k_c`cyk9g!gzkAkBkDk{c|cEk#gFk^k}c~cGk$g%gHkIkJkLkadbdMk'gNk_kcdddOk(g)gPkQkRkSkedfdTk*gUk`kgdhdVk+g,gWkXkYkZkidjd0k-g1k{kkdld

149 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 2'ddnenfngnhnA we.g;d/g:g;g,e=g?ginmn|kjn7 }k~kalbl[dcldlelflglhliljl2k3k4k5kklllmlnlolplqlcmdmemknln@g[g-e.e]g^g_g`g{gVbWb|g/e}g~gahbhXbYbchdh:e;eehfhghhhihZb0bjh=ekhlhmhnh1b2bohphqh?erhshthuhvh@ewhxhyhzh[e]eAhBhChDhEh3b4bFh^eGhHhIhJh5b6bKhLh_e`eMhNhOhPhQh7b8bRh{eShThUhVh9b!bWhXh|e}eYhZh0h1h2h#b$b3h~e4h5h6h7h%b'b8h9hafbf!h#h$h%h'h(b)b(hcf)h*h+h,h*b+b-h.h/hdf:h;h=h?h@hef[h]h^h_h`h{hff|h}hEd+d~haibi|dFd}dci~dp q r s e f g h gfaebeceWdde,dLdhfa b c d i j k l dieifiifeegihifegejfiihekfiejikilijekelfmileme]d^dmfnf_dXdYdneZdoem 0dnit u v w x oipiqirio siz y ti.d/d`d{duiofpfviwixiyi,b-bzirfAi6k.b/bBisftfCiDiEiFi:b;bGiufHi7k=b?bBevfwfIixf8 9 yfzfJi! # KiAfBfLiMiNiOi@b[bPiCfQi8k]b^bCeDeEeB C D E wdmdndxdydzdAd$ % BdodCdHd' ( RiDfEfSiTiUiVi_b`bWiFfXi9k{b|bYiGfHfZi0i1i2i}b~b3iIf4i!kacbcJfpeFeGeKfHeF G IeLfMfH I 5iNfOf6i7i8i9iccdc!iPf#i#kecfcQfRf) * + , Sf- . / : JeTfUfVf; = Wf$i? @ XfKeLeYfZf0f1f[ ] 2fMe3f%i^ _ ` { | } ~ abbbcbdb'i4f5f(i)i*i+igchc,i6f-i$kicjc7f8f9f!f#febfbNe$fgbhb.i%f'f/i:i;i=ikclc?i(f@i%kmcncqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i-f.f]i^i_i`iocpc{i/f|i'kqcrc}i:f;f~iajbjcjsctcdj=fejucvcfj?f@fgjhjijjjwcxckj[flj(kyczcmbmj]f^fnjojpjqjAcBcrj_fsj)kCcDcSe`f{ftj|fnbob}f~fujpbqbvjagbgwjxjyjzjEcFcAjcgBj*kGcHcTeUeVeN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U CjdgegDjEjFjGjLcMcHjfgIj+kNcOcJjgghgKjLjMjNjPcQcOjigPj,kRcScjgreWeXekgYeV W ZelgmgX Y QjngogRjSjTjUjTcUcVjpgWj-kVcWcqgrgrbsbtbubsgvbwbxbyb0etgugvgzbAbwgXjBbCb1esete2e3e4e5eZ 0 6eue7exg1 2 DbEbFbGbHbIbJbKbLbYjygzgZj0j1j2jXcYc3jAg4j.kZc0cBgCgDgEgFgMbNb8eGgObPb5jHgIg6j7j8j9j1c2c!jJg#j/k3c4cve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jOgPg%j'j(j)j5c6c*jQg+j:k7c8c,jRgSg-j.j/j:j9c!c;jTg=j#c$c?jUgVg@j[j]j^j%c'c_jWg`j;k(c)cUb{jXgYg|j}j~jak*c+cbkZgck=k,c-cdk0g1gekfkgkhk.c/cik2gjk@k:c;ckk3g4glkmknkok=c?cpk5gqk[k@c[crk6g7gsktkukvk]c^cwk8gxk]k_c`cyk9g!gzkAkBkDk{c|cEk#gFk^k}c~cGk$g%gHkIkJkLkadbdMk'gNk_kcdddOk(g)gPkQkRkSkedfdTk*gUk`kgdhdVk+g,gWkXkYkZkidjd0k-g1k{kkdld

150 return n 2'ddnenfngnhnA we.g;d/g:g;g,e=g?ginmn|kjn7 }k~kalbl[dcldlelflglhliljl2k3k4k5kklllmlnlolplqlcmdmemknln@g[g-e.e]g^g_g`g{gVbWb|g/e}g~gahbhXbYbchdh:e;eehfhghhhihZb0bjh=ekhlhmhnh1b2bohphqh?erhshthuhvh@ewhxhyhzh[e]eAhBhChDhEh3b4bFh^eGhHhIhJh5b6bKhLh_e`eMhNhOhPhQh7b8bRh{eShThUhVh9b!bWhXh|e}eYhZh0h1h2h#b$b3h~e4h5h6h7h%b'b8h9hafbf!h#h$h%h'h(b)b(hcf)h*h+h,h*b+b-h.h/hdf:h;h=h?h@hef[h]h^h_h`h{hff|h}hEd+d~haibi|dFd}dci~dp q r s e f g h gfaebeceWdde,dLdhfa b c d i j k l dieifiifeegihifegejfiihekfiejikilijekelfmileme]d^dmfnf_dXdYdneZdoem 0dnit u v w x oipiqirio siz y ti.d/d`d{duiofpfviwixiyi,b-bzirfAi6k.b/bBisftfCiDiEiFi:b;bGiufHi7k=b?bBevfwfIixf8 9 yfzfJi! # KiAfBfLiMiNiOi@b[bPiCfQi8k]b^bCeDeEeB C D E wdmdndxdydzdAd$ % BdodCdHd' ( RiDfEfSiTiUiVi_b`bWiFfXi9k{b|bYiGfHfZi0i1i2i}b~b3iIf4i!kacbcJfpeFeGeKfHeF G IeLfMfH I 5iNfOf6i7i8i9iccdc!iPf#i#kecfcQfRf) * + , Sf- . / : JeTfUfVf; = Wf$i? @ XfKeLeYfZf0f1f[ ] 2fMe3f%i^ _ ` { | } ~ abbbcbdb'i4f5f(i)i*i+igchc,i6f-i$kicjc7f8f9f!f#febfbNe$fgbhb.i%f'f/i:i;i=ikclc?i(f@i%kmcncqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i-f.f]i^i_i`iocpc{i/f|i'kqcrc}i:f;f~iajbjcjsctcdj=fejucvcfj?f@fgjhjijjjwcxckj[flj(kyczcmbmj]f^fnjojpjqjAcBcrj_fsj)kCcDcSe`f{ftj|fnbob}f~fujpbqbvjagbgwjxjyjzjEcFcAjcgBj*kGcHcTeUeVeN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U CjdgegDjEjFjGjLcMcHjfgIj+kNcOcJjgghgKjLjMjNjPcQcOjigPj,kRcScjgreWeXekgYeV W ZelgmgX Y QjngogRjSjTjUjTcUcVjpgWj-kVcWcqgrgrbsbtbubsgvbwbxbyb0etgugvgzbAbwgXjBbCb1esete2e3e4e5eZ 0 6eue7exg1 2 DbEbFbGbHbIbJbKbLbYjygzgZj0j1j2jXcYc3jAg4j.kZc0cBgCgDgEgFgMbNb8eGgObPb5jHgIg6j7j8j9j1c2c!jJg#j/k3c4cve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jOgPg%j'j(j)j5c6c*jQg+j:k7c8c,jRgSg-j.j/j:j9c!c;jTg=j#c$c?jUgVg@j[j]j^j%c'c_jWg`j;k(c)cUb{jXgYg|j}j~jak*c+cbkZgck=k,c-cdk0g1gekfkgkhk.c/cik2gjk@k:c;ckk3g4glkmknkok=c?cpk5gqk[k@c[crk6g7gsktkukvk]c^cwk8gxk]k_c`cyk9g!gzkAkBkDk{c|cEk#gFk^k}c~cGk$g%gHkIkJkLkadbdMk'gNk_kcdddOk(g)gPkQkRkSkedfdTk*gUk`kgdhdVk+g,gWkXkYkZkidjd0k-g1k{kkdld

151  

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

153 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

156  

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

158 """ 

159 return self._entry.allocate(size, device=device, memory_type=memory_type, peer_access=peer_access) 2dnenfngnhnwe.g;d/g:g;g,e=g?gin}k~kalbl2k3k4k5kklllmlnlolplqlcmdmem@g[g.e]g^g_g|g/e}g~gahbhchdh;eehfhghjh=ekhlhmhnhohphqh?erhshthuhvh@ewhxhyhzh]eAhBhChFh^eGhHhIhJhKhLh`eMhNhOhRh{eShThUhVhWhXh}eYhZh0h3h~e4h5h6h7h8h9hbf!h#h$h(hcf)h*h+h,h-h.h/hdf:h;h=h?h@hef[h]h_h`h{hff|h}haibi}deigiy uipfxirfAiBitfEiufHiBevfwfIixf8 9 yfzfJi! # KiBfNiCfQiwdndzdodCdRiEfUiFfXiYiHf1iIf4iJfpeFeGeKfHeF G IeLfMfH I 5iOf8iPf#iJeTfUfVf; = Wf$i? @ XfLe0fMe3f'i5f*i6f-i!fNe$f.i'f;i(f@iqeOePeQeJ K L M Re)f*f+fibjb,fkblb[i.f_i/f|i}i;fbj=fejfj@fij[fljmj^fpj_fsjSe`f{ftj|fnbob}f~fujpbqbvjbgyjcgBjpdJcsdKcvdCjegFjfgIjJjhgMjigPjjgreWeXekgYeV W ZelgmgX Y QjogTjpgWj0etgugvgzbAbwgXjBbCb1ete4eue7eYjzg1jAg4jEg8eGg5jIg8jJg#jve9e!e#e3 4 5 6 $eKgLgMgQbRbNgSbTb$jPg(jQg+j,jSg/jTg=j?jVg]jWg`j{jYg~jZgckdk1ggk2gjkkk4gnk5gqkrk7guk8gxkyk!gBk#gFkGk%gJk'gNkOk)gRk*gUkVk,gYk-g1k

160  

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

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

163  

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

165 """ 

166 return self._entry.deallocate(dptr) 2~h

167  

168 def memset( 

169 self, 

170 dst: Buffer | int, 

171 value, 

172 size_t width, 

173 size_t height=1, 

174 size_t pitch=0, 

175 *, 

176 dst_owner=None, 

177 ) -> MemsetNode: 

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

179  

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

181 """ 

182 return self._entry.memset( 2]d^dmfnf_do z

183 dst, value, width, height=height, pitch=pitch, dst_owner=dst_owner 2]d^dmfnf_do z

184 ) 

185  

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

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

188  

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

190 """ 

191 return self._entry.launch(config, kernel, *args) 2'd[dflglhliljlknln-e:e[e_e|eaf|de f g h WdgejfiihekfieYdt u v w x o `dofzisfGiBeyfAfPiCeDeEeB C D E mdBdDfWiGf3ipeIeNf!iJeKe2f4f,i7f8f9f!f#febfbNe$fgbhb%f?iqeRe-f{i:fdj?fkj]frjSe}fagAjTeUeVeN O P Q IcuddgHjggOjreZengVj0ese6eyg3jBgCgDgEgFgMbNb8eGgObPbHg!jve$eOg*jRg;jUg_jXgbk0gik3gpk6gwk9gEk$gMk(gTk+g0k

192  

193 def empty(self) -> EmptyNode: 

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

195  

196 Returns 

197 ------- 

198 EmptyNode 

199 A new EmptyNode with no dependencies. 

200 """ 

201 return self._entry.join() 27 ^h+doipiqirisiti.d/d

202  

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

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

205  

206 Parameters 

207 ---------- 

208 *nodes : GraphNode 

209 Nodes to merge. 

210  

211 Returns 

212 ------- 

213 EmptyNode 

214 A new EmptyNode that depends on all input nodes. 

215 """ 

216 return self._entry.join(*nodes) 2,e2k3k4k5kcmdmem.e/e;e=e?e@e]e^e`e{e}e~ebfcfdfeffft u v w x pfrftfufzfBfCfndodEfFfHfIfJfpeFeGeKfHeF G IeLfMfH I OfPfWfLeMe5f6fNe'f(fqeOePeQeJ K L M ,f.f/f;f=f@f[f^f_f~fbgcgJcKcegfghgigjgreWeXekgYeV W ZelgmgX Y ogpgwgteuezgAg8eIgJgve9e!e#e3 4 5 6 NgPgQgSgTgVgWgYgZg1g2g4g5g7g8g!g#g%g'g)g*g,g-g

217  

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

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

220  

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

222 """ 

223 return self._entry.memcpy(dst, src, size, dst_owner=dst_owner, src_owner=src_owner) 2cidefejikilijekelfmileme

224  

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

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

227  

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

229 """ 

230 return self._entry.embed(child) 2[d-e:e[e_e|eafWd,dLdhfXdYdZd0dofsfBeAfCeDeEeB C D E mdDfGfpeNfJeKe4f7f%fqeRe-f:f?f]fSeagTeUeVeN O P Q Icdgggreng0eseygBgHgve$eOgRgUgXg0g3g6g9g$g(g+g

231  

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

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

234  

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

236 """ 

237 return self._entry.record(event) 2cldifiifeeviCivfLiCexdSiZiFe6iQfRf) * + , TfYf(i8f/iOe)f]i~igjnj`fwjTeqdDjKjWeRjqgrgrbsbtbubtg2eZjCg6j9eKg%j-j@j|jeklkskzkHkPkWk

238  

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

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

241  

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

243 """ 

244 return self._entry.wait(event) 2hiwiDiwfMiDeydTi0iGe7iQfSf- . / : UfZf)i9f:iPe*f^iajhjoj{fxjUerdEjLjXeSjqgsgvbwbxbybug3e0jDg7j!eLg'j.j[j}jfkmktkAkIkQkXk

245  

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

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

248  

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

250 """ 

251 return self._entry.callback(fn, user_data=user_data) 2|kjndlel`g{ghhihDhEhPhQh1h2h%h'h~dgfaebeceLdhfa b c d i j k l XdneZdoe0dni.d/d{dyiFixfOiEeAdVi2iHe9iRfSfVf1f` { | } +i#f=iQe+f`icjjjqj|fzjVetdGjNjYeUjrgsgvg5eDbEbFbGb2jFg9j#eMg)j:j^jakhkokvkDkLkSkZk

252  

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

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

255  

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

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

258 via ``cudaGraphSetConditional``. 

259  

260 Parameters 

261 ---------- 

262 default_value : int, optional 

263 The default value to assign to the condition. 

264 If None, no default is assigned. 

265  

266 Returns 

267 ------- 

268 GraphCondition 

269 A condition variable for controlling conditional execution. 

270 """ 

271 cdef cydriver.CUgraphConditionalHandle c_handle 

272 cdef unsigned int flags = 0 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

273 cdef unsigned int default_val = 0 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

274  

275 if default_value is not None: 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

276 default_val = <unsigned int>default_value 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEdFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

277 flags = cydriver.CU_GRAPH_COND_ASSIGN_DEFAULT 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEdFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

278  

279 cdef cydriver.CUcontext ctx = NULL 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

280 with nogil: 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

281 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

282 HANDLE_RETURN(cydriver.cuGraphConditionalHandleCreate( 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

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

284  

285 return GraphCondition._from_handle(c_handle) 2A VbWbXbYbZb0b1b2b3b4b5b6b7b8b9b!b#b$b%b'b(b)b*b+bEd*dFdp q r s e f g h a b c d i j k l m Gd,b-b.b/b1d:b;b=b?b8 9 ! # 2d@b[b]b^bB C D E wdmdndxdydzdAd$ % BdodCdHd' ( 3d_b`b{b|b4d}b~bacbcF G H I 5dccdcecfc) * + , - . / : ; = ? @ Md[ ] ^ _ ` { | } ~ abbbcbdb6dgchcicjcebfbgbhb7dkclcmcncJ K L M ibjbkblb8docpcqcrcsctcucvc9dwcxcyczcmb!dAcBcCcDcnbobpbqbNdEcFcGcHcN O P Q pdIcJcqdrdsdtdR S udKcvdDdT U OdLcMcNcOcPdPcQcRcScV W X Y QdTcUcVcWcrbsbtbubvbwbxbybzbAbBbCbIdZ 0 1 2 DbEbFbGbHbIbJbKbLbRdXcYcZc0cMbNbObPbSd1c2c3c4c3 4 5 6 QbRbSbTbTd5c6c7c8c9c!c#c$cUd%c'c(c)cUb#d*c+c,c-cVd.c/c:c;c$d=c?c@c[c%d]c^c_c`cJd{c|c}c~cKdadbdcddd(dedfdgdhd)didjdkdld

286  

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

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

289  

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

291 """ 

292 return self._entry.if_then(condition) 2A Wb0b4b8b$b)bEdp e a i -b;b9 [bC % `b~bG dc* . = ] { bbcbdbhcfblcK jbpctcxcBcobFcO S McQcW UcsbwbAb0 EbJbKbLbYcNb2c4 Rb6c!c'c+c/c?c^c|cbdfdjd

293  

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

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

296  

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

298 """ 

299 return self._entry.if_else(condition) 2VbZb3b7b#b(bq f b j ,b:b8 @bB $ _b}bF cc) - ; [ ` ~ abbbgcebkcJ ibocscwcAcnbEcN R LcPcV TcrbvbzbZ DbHbIbJbXcMb1c3 Qb5c9c%c*c.c=c]c{cadedid

300  

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

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

303  

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

305 """ 

306 return self._entry.while_loop(condition) 2Yb2b6b!b'b+bs h d l m /b?b# ^bE ( |bbcI fc, : @ _ } abdbjchbncM lbrcvczcmbDcqbHcQ U OcScY WcubybCb2 GbIbLb0cPb4c6 Tb8c$c)cUb-c;c[c`c~cddhdld

307  

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

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

310  

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

312 """ 

313 return self._entry.switch(condition, count) 2Xb1b5b9b%b*bFdr g c k .b=b! ]bD ' {bacH ec+ / ? ^ | ~ cbicgbmcL kbqcucycmbCcpbGcP T NcRcX VctbxbBb1 FbHbKbZcOb3c5 Sb7c#c(cUb,c:c@c_c}ccdgdkd

314  

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

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

317  

318 Parameters 

319 ---------- 

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

321 Customizable dataclass for graph instantiation options. 

322  

323 Returns 

324 ------- 

325 Graph 

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

327 """ 

328 from cuda.core.graph._graph_builder import _instantiate_graph 2|k}k~kalbl[dcldlelflglhliljl2k3k4k5kklllmlnlnnonpnolplql|d}d~daebecedeeefegeheiejekeleme]d^d_dneoet u v w x o y .d/d`d{d

329  

330 return _instantiate_graph( 2|k}k~kalbl[dcldlelflglhliljl2k3k4k5kklllmlnlnnonpnolplql|d}d~daebecedeeefegeheiejekeleme]d^d_dneoet u v w x o y .d/d`d{d

331 driver.CUgraph(as_intptr(self._h_graph)), options) 2|k}k~kalbl[dcldlelflglhliljl2k3k4k5kklllmlnlnnonpnolplql|d}d~daebecedeeefegeheiejekeleme]d^d_dneoet u v w x o y .d/d`d{d

332  

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

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

335  

336 Parameters 

337 ---------- 

338 path : str 

339 File path for the DOT output. 

340 options : GraphDebugPrintOptions, optional 

341 Customizable options for the debug print. 

342 """ 

343 from cuda.core.graph._graph_builder import GraphDebugPrintOptions 2we.g;d

344  

345 cdef unsigned int flags = 0 2we.g;d

346 if options is not None: 2we.g;d

347 if not isinstance(options, GraphDebugPrintOptions): 2.g;d

348 raise TypeError("options must be a GraphDebugPrintOptions instance") 2.g

349 flags = options._to_flags() 2;d

350  

351 cdef bytes path_bytes = path.encode('utf-8') 2we;d

352 cdef const char* c_path = path_bytes 2we;d

353 with nogil: 2we;d

354 HANDLE_RETURN(cydriver.cuGraphDebugDotPrint(as_cu(self._h_graph), c_path, flags)) 2we;d

355  

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

357 """Return all nodes in the graph. 

358  

359 Returns 

360 ------- 

361 set of GraphNode 

362 All nodes in the graph. 

363 """ 

364 cdef vector[cydriver.CUgraphNode] nodes_vec 

365 nodes_vec.resize(128) 2-d'd%e'e(eA 7 )erlsl:dtlulvlwl=d?dxlylzlAlBlCl+e@dDlElFl=lGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l+dp q r s e f g h *eWdLda b c d i j k l XdYdZdm 0dt u v w x o z y

366 cdef size_t num_nodes = 128 2-d'd%e'e(eA 7 )erlsl:dtlulvlwl=d?dxlylzlAlBlCl+e@dDlElFl=lGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l+dp q r s e f g h *eWdLda b c d i j k l XdYdZdm 0dt u v w x o z y

367  

368 with nogil: 2-d'd%e'e(eA 7 )erlsl:dtlulvlwl=d?dxlylzlAlBlCl+e@dDlElFl=lGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l+dp q r s e f g h *eWdLda b c d i j k l XdYdZdm 0dt u v w x o z y

369 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 2-d'd%e'e(eA 7 )erlsl:dtlulvlwl=d?dxlylzlAlBlCl+e@dDlElFl=lGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l+dp q r s e f g h *eWdLda b c d i j k l XdYdZdm 0dt u v w x o z y

370  

371 if num_nodes == 0: 2-d'd%e'e(eA 7 )erlsl:dtlulvlwl=d?dxlylzlAlBlCl+e@dDlElFl=lGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l+dp q r s e f g h *eWdLda b c d i j k l XdYdZdm 0dt u v w x o z y

372 return set() 2'd=lp q r s m

373  

374 if num_nodes > 128: 2-d%e'e(eA 7 )erlsl:dtlulvlwl=d?dxlylzlAlBlCl+e@dDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l+de f g h *eWdLda b c d i j k l XdYdZdm 0dt u v w x o z y

375 nodes_vec.resize(num_nodes) 

376 with nogil: 

377 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 

378  

379 return {GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes)} 2-d%e'e(eA 7 )erlsl:dtlulvlwl=d?dxlylzlAlBlCl+e@dDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l+de f g h *eWdLda b c d i j k l XdYdZdm 0dt u v w x o z y

380  

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

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

383  

384 Returns 

385 ------- 

386 set of tuple 

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

388 a dependency edge in the graph. 

389 """ 

390 cdef vector[cydriver.CUgraphNode] from_nodes 

391 cdef vector[cydriver.CUgraphNode] to_nodes 

392 from_nodes.resize(128) 2xeye8l9lzeAe!l7 t u v w x o z y

393 to_nodes.resize(128) 2xeye8l9lzeAe!l7 t u v w x o z y

394 cdef size_t num_edges = 128 2xeye8l9lzeAe!l7 t u v w x o z y

395  

396 with nogil: 2xeye8l9lzeAe!l7 t u v w x o z y

397 IF CUDA_CORE_BUILD_MAJOR >= 13: 

398 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2xeye8l9lzeAe!l7 t u v w x o z y

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

400 ELSE: 

401 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

403  

404 if num_edges == 0: 2xeye8l9lzeAe!l7 t u v w x o z y

405 return set() 28l9l!lz

406  

407 if num_edges > 128: 2xeyezeAe7 t u v w x o z y

408 from_nodes.resize(num_edges) 

409 to_nodes.resize(num_edges) 

410 with nogil: 

411 IF CUDA_CORE_BUILD_MAJOR >= 13: 

412 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

414 ELSE: 

415 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

417  

418 return { 2xeyezeAe7 t u v w x o z y

419 (GraphNode._create(self._h_graph, from_nodes[i]), 2xeyezeAe7 t u v w x o z y

420 GraphNode._create(self._h_graph, to_nodes[i])) 2xeyezeAe7 t u v w x o z y

421 for i in range(num_edges) 2xeyezeAe7 t u v w x o z y

422 } 

423  

424 @property 

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

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

427 return as_py(self._h_graph) 2ungfLda b c d ifjfkflf.d/d`d{dqf