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

128 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-07-19 01:12 +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 

10  

11from libcpp.vector cimport vector 

12  

13from cuda.bindings cimport cydriver 

14  

15from cuda.core.graph._graph_node cimport GraphNode 

16from cuda.core._resource_handles cimport ( 

17 GraphHandle, 

18 as_cu, 

19 as_intptr, 

20 as_py, 

21 create_graph_handle, 

22 create_graph_node_handle, 

23) 

24from cuda.core._utils.cuda_utils cimport HANDLE_RETURN 

25  

26from typing import TYPE_CHECKING 

27  

28from cuda.core._utils.cuda_utils import driver 

29  

30from cuda.core.typing import GraphMemoryType 

31  

32if TYPE_CHECKING: 

33 from cuda.core._device import Device 

34 from cuda.core._event import Event 

35 from cuda.core._launch_config import LaunchConfig 

36 from cuda.core._memory._buffer import Buffer 

37 from cuda.core._module import Kernel 

38 from cuda.core.graph._graph_builder import ( 

39 Graph, 

40 GraphCompleteOptions, 

41 GraphDebugPrintOptions, 

42 ) 

43 from cuda.core.graph._subclasses import ( 

44 AllocNode, 

45 ChildGraphNode, 

46 EmptyNode, 

47 EventRecordNode, 

48 EventWaitNode, 

49 FreeNode, 

50 HostCallbackNode, 

51 IfElseNode, 

52 IfNode, 

53 KernelNode, 

54 MemcpyNode, 

55 MemsetNode, 

56 SwitchNode, 

57 WhileNode, 

58 ) 

59  

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

61  

62  

63cdef class GraphCondition: 

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

65  

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

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

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

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

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

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

72  

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

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

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

76 condition. 

77 """ 

78  

79 @staticmethod 

80 cdef GraphCondition _from_handle(cydriver.CUgraphConditionalHandle c_handle): 

81 cdef GraphCondition self = GraphCondition.__new__(GraphCondition) 26d+l1d,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmr MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f imjmxd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

82 self._c_handle = c_handle 26d+l1d,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmr MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f imjmxd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

83 return self 26d+l1d,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmr MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f imjmxd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

84  

85 def __repr__(self) -> str: 

86 return f"<GraphCondition handle=0x{<unsigned long long>self._c_handle:x}>" 2Yd

87  

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

89 if not isinstance(other, GraphCondition): 2]m^m_m`m'd(dVe)dxdDdgdzcAchdidjdkdI J ldBcmdudK L EdFdGdzdHdIdJdKdLdAdBd

90 return NotImplemented 2xdDdgdzcAchdidjdkdI J ldBcmdudK L EdFdGdzdHdIdJdKd

91 return self._c_handle == (<GraphCondition>other)._c_handle 2]m^m_m`m'd(dVe)dxdLdAdBd

92  

93 def __hash__(self) -> int: 

94 return hash(<unsigned long long>self._c_handle) 2OdPdndddedodpdqdrd3 4 sdfdtdyd5 6 QdRdSdCdTdUdVdWdXdZd0dAdBd

95  

96 @property 

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

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

99 return <unsigned long long>self._c_handle 26d+l1d,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmxd

100  

101  

102cdef class GraphDefinition: 

103 """A graph definition. 

104  

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

106 and specifying dependencies. Once construction is complete, call 

107 instantiate() to obtain an executable Graph. 

108 """ 

109  

110 def __init__(self): 

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

112 cdef cydriver.CUgraph graph = NULL 2kmlmmmnmompmqmrmsmWgXgYgtmWeZg0gumvmwmxmymY zmAmBmCm8dDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m1g2gXeYe3g4g5g6g7gMbNb8gZe9g!g#g$gObPb%g'g0e1e(g)g*g+g,gQbRb-g2e.g/g:g;gSbTb=g?g@g8m3e[g]g^g_g`g4e{g|g}g~g5e6eahbhchdhehUbVbfh7eghhhihjhWbXbkhlh8e9emhnhohphqhYbZbrh!eshthuhvh0b1bwhxh#e$eyhzhAhBhCh2b3bDh%eEhFhGhHh4b5bIhJh'e(eKhLhMhNhOh6b7bPh)eQhRhShTh8b9bUhVhWh*eXhYhZh0h1h+e2h3h4h5h6h7h,e8h9hvd9m!m#m$m4d%m5d!h#h$h*dwd+dh i j k b c d e ,d-dMd%h'h(h-e.d)h*h/d.e+h:d/e;d,h-h.h=d?d:e/h@d[d9d!d;e=e#dNd:h]df ;h=hl m n o p ?h@h[h]hg ^hq _h$d`h?exd@e{h|h}h~hai!b#bbi[eciGk$b%bdi]eOd^eeifigiWlhi'b(bii_ejiHk)b*bfe`e{eki|eZ 0 }e~eli1 2 miafPdbfnioipiXlqi+b,bricfsiIk-b.bgeheies t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 tidfQdefuiviwiYlxi/b:byiffziJk;b=bAigfRdhfBiCiDiZlEi?b@bFiifGiKk[b]bjf^djekekflew x melfmfy z HinfSdofIiJiKi0lLi^b_bMipfNiLk`b{bqfrf7 8 9 ! sf# $ % ' netfufvf( ) wfOi* + xfoeCdpeyfzfAfBf, - CfqeDfPi. / : ; = ? @ [ ] ^ _ QiEfTdFfRiSiTi1lUi|b}bViGfWiMk~bacHfIfJfKfLf` { reMf| } XiNfUdOfYiZi0i2l1ibccc2iPf3iNkdcec_dseteueA B C D veQfRfSf~ abTfbbcb4iUfVdVf5i6i7i3l8ifcgc9iWf!iOkhcic#iXfYf$i%i'i(ijckc)iZf*ilcmc+i0fWd1f,i-i.i4l/incoc:i2f;iPkpcqcdb=i3fXd4f?i@i[i5l]ircsc^i5f_iQktcucwe6f7f`i8febfb9f!f{igbhb|i#fDd$f}i~iajMlbjvcwccj%fdjRkxcycxeyezeE F G H gdzcAchdidjdkdI J ldBcmdudK L ej'fEd(ffjgjhjNlijCcDcjj)fkjSkEcFclj*fFd+fmjnjojOlpjGcHcqj,frjTkIcJc-f`dAeBe.fCeM N De/f:fO P sj;fGd=ftjujvjPlwjKcLcxj?fyjUkMcNc@f[fibjbkblb]fmbnbobpbEe^f_f`fqbrb{fzjsbtbFe{dzd|dGeHeIeJeQ R Ke}dLe|fS T ubvbwbxbybzbAbBbCbAj}fHd~fBjCjDjQlEjOcPcFjagGjVkQcRcbgcgdgegfgDbEbMeggFbGbHjhgIdigIjJjKjRlLjScTcMjjgNjWkUcVc~dNeOePeU V W X QekglgmgHbIbngJbKbOjogJdpgPjQjRjSlSjWcXcTjqgUjXkYcZcVjrgsgWjXjYjZj0c1c0jtg1j2c3c2jugKdvg3j4j5jTl6j4c5c7jwg8jYk6c7cLb9jxgYdyg!j#j$j6l%j8c9c'jzg(jZk!c#c)jAgLdBg*j+j,jUl-j$c%c.jCg/j0k'c(c:jDgZdEg;j=j?j7l@j)c*c[jFg]j1k+c,c^jGg0dHg_j`j{j8l|j-c.c}jIg~j2k/c:cakJgAdKgbkckdk3kek;c=cfkLggk4k?c@chkMgBdNgikjkkk5klk[c]cmkOgnk6k^c_cokPg2dQgpkqkrk'msk`c{ctkRguk7k|c}cvkSg3dTgwkxkyk(mzk~cadAkUgBk8kbdcd

113 with nogil: 2kmlmmmnmompmqmrmsmWgXgYgtmWeZg0gumvmwmxmymY zmAmBmCm8dDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m1g2gXeYe3g4g5g6g7gMbNb8gZe9g!g#g$gObPb%g'g0e1e(g)g*g+g,gQbRb-g2e.g/g:g;gSbTb=g?g@g8m3e[g]g^g_g`g4e{g|g}g~g5e6eahbhchdhehUbVbfh7eghhhihjhWbXbkhlh8e9emhnhohphqhYbZbrh!eshthuhvh0b1bwhxh#e$eyhzhAhBhCh2b3bDh%eEhFhGhHh4b5bIhJh'e(eKhLhMhNhOh6b7bPh)eQhRhShTh8b9bUhVhWh*eXhYhZh0h1h+e2h3h4h5h6h7h,e8h9hvd9m!m#m$m4d%m5d!h#h$h*dwd+dh i j k b c d e ,d-dMd%h'h(h-e.d)h*h/d.e+h:d/e;d,h-h.h=d?d:e/h@d[d9d!d;e=e#dNd:h]df ;h=hl m n o p ?h@h[h]hg ^hq _h$d`h?exd@e{h|h}h~hai!b#bbi[eciGk$b%bdi]eOd^eeifigiWlhi'b(bii_ejiHk)b*bfe`e{eki|eZ 0 }e~eli1 2 miafPdbfnioipiXlqi+b,bricfsiIk-b.bgeheies t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 tidfQdefuiviwiYlxi/b:byiffziJk;b=bAigfRdhfBiCiDiZlEi?b@bFiifGiKk[b]bjf^djekekflew x melfmfy z HinfSdofIiJiKi0lLi^b_bMipfNiLk`b{bqfrf7 8 9 ! sf# $ % ' netfufvf( ) wfOi* + xfoeCdpeyfzfAfBf, - CfqeDfPi. / : ; = ? @ [ ] ^ _ QiEfTdFfRiSiTi1lUi|b}bViGfWiMk~bacHfIfJfKfLf` { reMf| } XiNfUdOfYiZi0i2l1ibccc2iPf3iNkdcec_dseteueA B C D veQfRfSf~ abTfbbcb4iUfVdVf5i6i7i3l8ifcgc9iWf!iOkhcic#iXfYf$i%i'i(ijckc)iZf*ilcmc+i0fWd1f,i-i.i4l/incoc:i2f;iPkpcqcdb=i3fXd4f?i@i[i5l]ircsc^i5f_iQktcucwe6f7f`i8febfb9f!f{igbhb|i#fDd$f}i~iajMlbjvcwccj%fdjRkxcycxeyezeE F G H gdzcAchdidjdkdI J ldBcmdudK L ej'fEd(ffjgjhjNlijCcDcjj)fkjSkEcFclj*fFd+fmjnjojOlpjGcHcqj,frjTkIcJc-f`dAeBe.fCeM N De/f:fO P sj;fGd=ftjujvjPlwjKcLcxj?fyjUkMcNc@f[fibjbkblb]fmbnbobpbEe^f_f`fqbrb{fzjsbtbFe{dzd|dGeHeIeJeQ R Ke}dLe|fS T ubvbwbxbybzbAbBbCbAj}fHd~fBjCjDjQlEjOcPcFjagGjVkQcRcbgcgdgegfgDbEbMeggFbGbHjhgIdigIjJjKjRlLjScTcMjjgNjWkUcVc~dNeOePeU V W X QekglgmgHbIbngJbKbOjogJdpgPjQjRjSlSjWcXcTjqgUjXkYcZcVjrgsgWjXjYjZj0c1c0jtg1j2c3c2jugKdvg3j4j5jTl6j4c5c7jwg8jYk6c7cLb9jxgYdyg!j#j$j6l%j8c9c'jzg(jZk!c#c)jAgLdBg*j+j,jUl-j$c%c.jCg/j0k'c(c:jDgZdEg;j=j?j7l@j)c*c[jFg]j1k+c,c^jGg0dHg_j`j{j8l|j-c.c}jIg~j2k/c:cakJgAdKgbkckdk3kek;c=cfkLggk4k?c@chkMgBdNgikjkkk5klk[c]cmkOgnk6k^c_cokPg2dQgpkqkrk'msk`c{ctkRguk7k|c}cvkSg3dTgwkxkyk(mzk~cadAkUgBk8kbdcd

114 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2kmlmmmnmompmqmrmsmWgXgYgtmWeZg0gumvmwmxmymY zmAmBmCm8dDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m1g2gXeYe3g4g5g6g7gMbNb8gZe9g!g#g$gObPb%g'g0e1e(g)g*g+g,gQbRb-g2e.g/g:g;gSbTb=g?g@g8m3e[g]g^g_g`g4e{g|g}g~g5e6eahbhchdhehUbVbfh7eghhhihjhWbXbkhlh8e9emhnhohphqhYbZbrh!eshthuhvh0b1bwhxh#e$eyhzhAhBhCh2b3bDh%eEhFhGhHh4b5bIhJh'e(eKhLhMhNhOh6b7bPh)eQhRhShTh8b9bUhVhWh*eXhYhZh0h1h+e2h3h4h5h6h7h,e8h9hvd9m!m#m$m4d%m5d!h#h$h*dwd+dh i j k b c d e ,d-dMd%h'h(h-e.d)h*h/d.e+h:d/e;d,h-h.h=d?d:e/h@d[d9d!d;e=e#dNd:h]df ;h=hl m n o p ?h@h[h]hg ^hq _h$d`h?exd@e{h|h}h~hai!b#bbi[eciGk$b%bdi]eOd^eeifigiWlhi'b(bii_ejiHk)b*bfe`e{eki|eZ 0 }e~eli1 2 miafPdbfnioipiXlqi+b,bricfsiIk-b.bgeheies t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 tidfQdefuiviwiYlxi/b:byiffziJk;b=bAigfRdhfBiCiDiZlEi?b@bFiifGiKk[b]bjf^djekekflew x melfmfy z HinfSdofIiJiKi0lLi^b_bMipfNiLk`b{bqfrf7 8 9 ! sf# $ % ' netfufvf( ) wfOi* + xfoeCdpeyfzfAfBf, - CfqeDfPi. / : ; = ? @ [ ] ^ _ QiEfTdFfRiSiTi1lUi|b}bViGfWiMk~bacHfIfJfKfLf` { reMf| } XiNfUdOfYiZi0i2l1ibccc2iPf3iNkdcec_dseteueA B C D veQfRfSf~ abTfbbcb4iUfVdVf5i6i7i3l8ifcgc9iWf!iOkhcic#iXfYf$i%i'i(ijckc)iZf*ilcmc+i0fWd1f,i-i.i4l/incoc:i2f;iPkpcqcdb=i3fXd4f?i@i[i5l]ircsc^i5f_iQktcucwe6f7f`i8febfb9f!f{igbhb|i#fDd$f}i~iajMlbjvcwccj%fdjRkxcycxeyezeE F G H gdzcAchdidjdkdI J ldBcmdudK L ej'fEd(ffjgjhjNlijCcDcjj)fkjSkEcFclj*fFd+fmjnjojOlpjGcHcqj,frjTkIcJc-f`dAeBe.fCeM N De/f:fO P sj;fGd=ftjujvjPlwjKcLcxj?fyjUkMcNc@f[fibjbkblb]fmbnbobpbEe^f_f`fqbrb{fzjsbtbFe{dzd|dGeHeIeJeQ R Ke}dLe|fS T ubvbwbxbybzbAbBbCbAj}fHd~fBjCjDjQlEjOcPcFjagGjVkQcRcbgcgdgegfgDbEbMeggFbGbHjhgIdigIjJjKjRlLjScTcMjjgNjWkUcVc~dNeOePeU V W X QekglgmgHbIbngJbKbOjogJdpgPjQjRjSlSjWcXcTjqgUjXkYcZcVjrgsgWjXjYjZj0c1c0jtg1j2c3c2jugKdvg3j4j5jTl6j4c5c7jwg8jYk6c7cLb9jxgYdyg!j#j$j6l%j8c9c'jzg(jZk!c#c)jAgLdBg*j+j,jUl-j$c%c.jCg/j0k'c(c:jDgZdEg;j=j?j7l@j)c*c[jFg]j1k+c,c^jGg0dHg_j`j{j8l|j-c.c}jIg~j2k/c:cakJgAdKgbkckdk3kek;c=cfkLggk4k?c@chkMgBdNgikjkkk5klk[c]cmkOgnk6k^c_cokPg2dQgpkqkrk'msk`c{ctkRguk7k|c}cvkSg3dTgwkxkyk(mzk~cadAkUgBk8kbdcd

115 self._h_graph = create_graph_handle(graph) 2a kmlmmmnmompmqmrmsmWgXgYgtmWeZg0gumvmwmxmymY zmAmBmCm8dDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m1g2gXeYe3g4g5g6g7gMbNb8gZe9g!g#g$gObPb%g'g0e1e(g)g*g+g,gQbRb-g2e.g/g:g;gSbTb=g?g@g8m3e[g]g^g_g`g4e{g|g}g~g5e6eahbhchdhehUbVbfh7eghhhihjhWbXbkhlh8e9emhnhohphqhYbZbrh!eshthuhvh0b1bwhxh#e$eyhzhAhBhCh2b3bDh%eEhFhGhHh4b5bIhJh'e(eKhLhMhNhOh6b7bPh)eQhRhShTh8b9bUhVhWh*eXhYhZh0h1h+e2h3h4h5h6h7h,e8h9hvd9m!m#m$m4d%m5d!h#h$h*dwd+dh i j k b c d e ,d-dMd%h'h(h-e.d)h*h/d.e+h:d/e;d,h-h.h=d?d:e/h@d[d9d!d;e=e#dNd:h]df ;h=hl m n o p ?h@h[h]hg ^hq _h$d`h?exd@e{h|h}h~hai!b#bbi[eciGk$b%bdi]eOd^eeifigiWlhi'b(bii_ejiHk)b*bfe`e{eki|eZ 0 }e~eli1 2 miafPdbfnioipiXlqi+b,bricfsiIk-b.bgeheies t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 tidfQdefuiviwiYlxi/b:byiffziJk;b=bAigfRdhfBiCiDiZlEi?b@bFiifGiKk[b]bjf^djekekflew x melfmfy z HinfSdofIiJiKi0lLi^b_bMipfNiLk`b{bqfrf7 8 9 ! sf# $ % ' netfufvf( ) wfOi* + xfoeCdpeyfzfAfBf, - CfqeDfPi. / : ; = ? @ [ ] ^ _ QiEfTdFfRiSiTi1lUi|b}bViGfWiMk~bacHfIfJfKfLf` { reMf| } XiNfUdOfYiZi0i2l1ibccc2iPf3iNkdcec_dseteueA B C D veQfRfSf~ abTfbbcb4iUfVdVf5i6i7i3l8ifcgc9iWf!iOkhcic#iXfYf$i%i'i(ijckc)iZf*ilcmc+i0fWd1f,i-i.i4l/incoc:i2f;iPkpcqcdb=i3fXd4f?i@i[i5l]ircsc^i5f_iQktcucwe6f7f`i8febfb9f!f{igbhb|i#fDd$f}i~iajMlbjvcwccj%fdjRkxcycxeyezeE F G H gdzcAchdidjdkdI J ldBcmdudK L ej'fEd(ffjgjhjNlijCcDcjj)fkjSkEcFclj*fFd+fmjnjojOlpjGcHcqj,frjTkIcJc-f`dAeBe.fCeM N De/f:fO P sj;fGd=ftjujvjPlwjKcLcxj?fyjUkMcNc@f[fibjbkblb]fmbnbobpbEe^f_f`fqbrb{fzjsbtbFe{dzd|dGeHeIeJeQ R Ke}dLe|fS T ubvbwbxbybzbAbBbCbAj}fHd~fBjCjDjQlEjOcPcFjagGjVkQcRcbgcgdgegfgDbEbMeggFbGbHjhgIdigIjJjKjRlLjScTcMjjgNjWkUcVc~dNeOePeU V W X QekglgmgHbIbngJbKbOjogJdpgPjQjRjSlSjWcXcTjqgUjXkYcZcVjrgsgWjXjYjZj0c1c0jtg1j2c3c2jugKdvg3j4j5jTl6j4c5c7jwg8jYk6c7cLb9jxgYdyg!j#j$j6l%j8c9c'jzg(jZk!c#c)jAgLdBg*j+j,jUl-j$c%c.jCg/j0k'c(c:jDgZdEg;j=j?j7l@j)c*c[jFg]j1k+c,c^jGg0dHg_j`j{j8l|j-c.c}jIg~j2k/c:cakJgAdKgbkckdk3kek;c=cfkLggk4k?c@chkMgBdNgikjkkk5klk[c]cmkOgnk6k^c_cokPg2dQgpkqkrk'msk`c{ctkRguk7k|c}cvkSg3dTgwkxkyk(mzk~cadAkUgBk8kbdcd

116  

117 @staticmethod 

118 cdef GraphDefinition _from_handle(GraphHandle h_graph): 

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

120 cdef GraphDefinition g = GraphDefinition.__new__(GraphDefinition) 26d1dReSeTer UeMbNbObPb%dQbRbSbTb9l!l#l$l%l'lUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bh i j k b c d e MdNdf !b#b$b%b'b(b)b*bZ 0 1 2 +b,b-b.bs t u v 3 4 5 6 /b:b;b=b?b@b[b]bw x y z ^b_b`b{b7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ |b}b~bac` { | } bcccdcecA B C D ~ abbbcbfcgchcicjckclcmcncocpcqcdbrcsctcucebfbgbhbvcwcxcycE F G H I J K L CcDcEcFcGcHcIcJcM N O P KcLcMcNcibjbkblbmbnbobpbqbrbsbtbQ R S T ubvbwbxbybzbAbBbCbOcPcQcRcDbEbFbGbScTcUcVcU V W X HbIbJbKbWcXcYcZc0c1c2c3c4c5c6c7cLb8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcd

121 g._h_graph = h_graph 26d1dReSeTer UeMbNbObPb%dQbRbSbTb9l!l#l$l%l'lUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bh i j k b c d e MdNdf !b#b$b%b'b(b)b*bZ 0 1 2 +b,b-b.bs t u v 3 4 5 6 /b:b;b=b?b@b[b]bw x y z ^b_b`b{b7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ |b}b~bac` { | } bcccdcecA B C D ~ abbbcbfcgchcicjckclcmcncocpcqcdbrcsctcucebfbgbhbvcwcxcycE F G H I J K L CcDcEcFcGcHcIcJcM N O P KcLcMcNcibjbkblbmbnbobpbqbrbsbtbQ R S T ubvbwbxbybzbAbBbCbOcPcQcRcDbEbFbGbScTcUcVcU V W X HbIbJbKbWcXcYcZc0c1c2c3c4c5c6c7cLb8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcd

122 return g 26d1dReSeTer UeMbNbObPb%dQbRbSbTb9l!l#l$l%l'lUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bh i j k b c d e MdNdf !b#b$b%b'b(b)b*bZ 0 1 2 +b,b-b.bs t u v 3 4 5 6 /b:b;b=b?b@b[b]bw x y z ^b_b`b{b7 8 9 ! # $ % ' ( ) * + , - . / : ; = ? @ [ ] ^ _ |b}b~bac` { | } bcccdcecA B C D ~ abbbcbfcgchcicjckclcmcncocpcqcdbrcsctcucebfbgbhbvcwcxcycE F G H I J K L CcDcEcFcGcHcIcJcM N O P KcLcMcNcibjbkblbmbnbobpbqbrbsbtbQ R S T ubvbwbxbybzbAbBbCbOcPcQcRcDbEbFbGbScTcUcVcU V W X HbIbJbKbWcXcYcZc0c1c2c3c4c5c6c7cLb8c9c!c#c$c%c'c(c)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcd

123  

124 def __repr__(self) -> str: 

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

126  

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

128 if not isinstance(other, GraphDefinition): 2%d'd(d)d9l!l#l$l%l'l~hMlNlOlPlFe{dzd|dGeHeIeJeQ R Ke}dLe|fS T QlRlSlTlUl3k5k

129 return NotImplemented 2~hMlNlOlPlFe{dzd|dGeHeIeJeQ R Ke}dLe|fS T QlRlSlTl

130 return as_intptr(self._h_graph) == as_intptr((<GraphDefinition>other)._h_graph) 2%d'd(d)d9l!l#l$l%l'l~hUl3k5k

131  

132 def __hash__(self) -> int: 

133 return hash(as_intptr(self._h_graph)) 2a WlXlYlZl0lxfoeCdpeyfzfAfBf, - CfqeDfPi. / 1l2l3l4l5l7l8l3k5k

134  

135 @property 

136 def _entry(self) -> GraphNode: 

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

138 cdef GraphNode n = GraphNode.__new__(GraphNode) 21d)m*m+m,m-mr aeVg7dWgXgYgWeZg0g.m=m9k/mY !k#k$k%k8d'k(k)k*k+k,k-k.kCkDkEkFk/k:k;k=k?k@k[k(l)l*l:m;m1g2gXeYe3g4g5g6g7gMbNb8gZe9g!g#g$gObPb%g'g0e1e(g)g*g+g,gQbRb-g2e.g/g:g;gSbTb=g?g@g3e[g]g^g_g`g4e{g|g}g~g5e6eahbhchdhehUbVbfh7eghhhihjhWbXbkhlh8e9emhnhohphqhYbZbrh!eshthuhvh0b1bwhxh#e$eyhzhAhBhCh2b3bDh%eEhFhGhHh4b5bIhJh'e(eKhLhMhNhOh6b7bPh)eQhRhShTh8b9bUhVhWh*eXhYhZh0h1h+e2h3h4h5h6h7h,e8h9hvd5d!h#h$h*dwd+dh i j k b c d e ,d-dMd%h'h(h-e.d)h*h/d.e+h:d/e;d,h-h.h=d?d:e/h@d[d9d!d;e=e#dNd:h]df ;h=hl m n o p ?h@h[h]hg ^hq _h$d`h?e@e{h|h}hai!b#bbi[eciGk$b%bdi]e^eeifigihi'b(bii_ejiHk)b*bfe`e{eki|eZ 0 }e~eli1 2 miafbfnioipiqi+b,bricfsiIk-b.bgeheies t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 tidfefuiviwixi/b:byiffziJk;b=bAigfhfBiCiDiEi?b@bFiifGiKk[b]bjf^djekekflew x melfmfy z HinfofIiJiKiLi^b_bMipfNiLk`b{bqfrf7 8 9 ! sf# $ % ' netfufvf( ) wfOi* + xfoepeyfzfAfBf, - CfqeDfPi. / : ; = ? @ [ ] ^ _ QiEfFfRiSiTiUi|b}bViGfWiMk~bacHfIfJfKfLf` { reMf| } XiNfOfYiZi0i1ibccc2iPf3iNkdcec_dseteueA B C D veQfRfSf~ abTfbbcb4iUfVf5i6i7i8ifcgc9iWf!iOkhcic#iXfYf$i%i'i(ijckc)iZf*ilcmc+i0f1f,i-i.i/incoc:i2f;iPkpcqcdb=i3f4f?i@i[i]ircsc^i5f_iQktcucwe6f7f`i8febfb9f!f{igbhb|i#f$f}i~iajbjvcwccj%fdjRkxcycxeyezeE F G H gdzcAchdidjdkdI J ldBcmdudK L ej'f(ffjgjhjijCcDcjj)fkjSkEcFclj*f+fmjnjojpjGcHcqj,frjTkIcJc-f`dAeBe.fCeM N De/f:fO P sj;f=ftjujvjwjKcLcxj?fyjUkMcNc@f[fibjbkblb]fmbnbobpbEe^f_f`fqbrb{fzjsbtbFe{d|dGeHeIeJeQ R Ke}dLe|fS T ubvbwbxbybzbAbBbCbAj}f~fBjCjDjEjOcPcFjagGjVkQcRcbgcgdgegfgDbEbMeggFbGbHjhgigIjJjKjLjScTcMjjgNjWkUcVc~dNeOePeU V W X QekglgmgHbIbngJbKbOjogpgPjQjRjSjWcXcTjqgUjXkYcZcVjrgsgWjXjYjZj0c1c0jtg1j2c3c2jugvg3j4j5j6j4c5c7jwg8jYk6c7cLb9jxgyg!j#j$j%j8c9c'jzg(jZk!c#c)jAgBg*j+j,j-j$c%c.jCg/j0k'c(c:jDgEg;j=j?j@j)c*c[jFg]j1k+c,c^jGgHg_j`j{j|j-c.c}jIg~j2k/c:cakJgKgbkckdkek;c=cfkLggk4k?c@chkMgNgikjkkklk[c]cmkOgnk6k^c_cokPgQgpkqkrksk`c{ctkRguk7k|c}cvkSgTgwkxkykzk~cadAkUgBk8kbdcd

139 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 21d)m*m+m,m-mr aeVg7dWgXgYgWeZg0g.m=m9k/mY !k#k$k%k8d'k(k)k*k+k,k-k.kCkDkEkFk/k:k;k=k?k@k[k(l)l*l:m;m1g2gXeYe3g4g5g6g7gMbNb8gZe9g!g#g$gObPb%g'g0e1e(g)g*g+g,gQbRb-g2e.g/g:g;gSbTb=g?g@g3e[g]g^g_g`g4e{g|g}g~g5e6eahbhchdhehUbVbfh7eghhhihjhWbXbkhlh8e9emhnhohphqhYbZbrh!eshthuhvh0b1bwhxh#e$eyhzhAhBhCh2b3bDh%eEhFhGhHh4b5bIhJh'e(eKhLhMhNhOh6b7bPh)eQhRhShTh8b9bUhVhWh*eXhYhZh0h1h+e2h3h4h5h6h7h,e8h9hvd5d!h#h$h*dwd+dh i j k b c d e ,d-dMd%h'h(h-e.d)h*h/d.e+h:d/e;d,h-h.h=d?d:e/h@d[d9d!d;e=e#dNd:h]df ;h=hl m n o p ?h@h[h]hg ^hq _h$d`h?e@e{h|h}hai!b#bbi[eciGk$b%bdi]e^eeifigihi'b(bii_ejiHk)b*bfe`e{eki|eZ 0 }e~eli1 2 miafbfnioipiqi+b,bricfsiIk-b.bgeheies t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 tidfefuiviwixi/b:byiffziJk;b=bAigfhfBiCiDiEi?b@bFiifGiKk[b]bjf^djekekflew x melfmfy z HinfofIiJiKiLi^b_bMipfNiLk`b{bqfrf7 8 9 ! sf# $ % ' netfufvf( ) wfOi* + xfoepeyfzfAfBf, - CfqeDfPi. / : ; = ? @ [ ] ^ _ QiEfFfRiSiTiUi|b}bViGfWiMk~bacHfIfJfKfLf` { reMf| } XiNfOfYiZi0i1ibccc2iPf3iNkdcec_dseteueA B C D veQfRfSf~ abTfbbcb4iUfVf5i6i7i8ifcgc9iWf!iOkhcic#iXfYf$i%i'i(ijckc)iZf*ilcmc+i0f1f,i-i.i/incoc:i2f;iPkpcqcdb=i3f4f?i@i[i]ircsc^i5f_iQktcucwe6f7f`i8febfb9f!f{igbhb|i#f$f}i~iajbjvcwccj%fdjRkxcycxeyezeE F G H gdzcAchdidjdkdI J ldBcmdudK L ej'f(ffjgjhjijCcDcjj)fkjSkEcFclj*f+fmjnjojpjGcHcqj,frjTkIcJc-f`dAeBe.fCeM N De/f:fO P sj;f=ftjujvjwjKcLcxj?fyjUkMcNc@f[fibjbkblb]fmbnbobpbEe^f_f`fqbrb{fzjsbtbFe{d|dGeHeIeJeQ R Ke}dLe|fS T ubvbwbxbybzbAbBbCbAj}f~fBjCjDjEjOcPcFjagGjVkQcRcbgcgdgegfgDbEbMeggFbGbHjhgigIjJjKjLjScTcMjjgNjWkUcVc~dNeOePeU V W X QekglgmgHbIbngJbKbOjogpgPjQjRjSjWcXcTjqgUjXkYcZcVjrgsgWjXjYjZj0c1c0jtg1j2c3c2jugvg3j4j5j6j4c5c7jwg8jYk6c7cLb9jxgyg!j#j$j%j8c9c'jzg(jZk!c#c)jAgBg*j+j,j-j$c%c.jCg/j0k'c(c:jDgEg;j=j?j@j)c*c[jFg]j1k+c,c^jGgHg_j`j{j|j-c.c}jIg~j2k/c:cakJgKgbkckdkek;c=cfkLggk4k?c@chkMgNgikjkkklk[c]cmkOgnk6k^c_cokPgQgpkqkrksk`c{ctkRguk7k|c}cvkSgTgwkxkykzk~cadAkUgBk8kbdcd

140 return n 21d)m*m+m,m-mr aeVg7dWgXgYgWeZg0g.m=m9k/mY !k#k$k%k8d'k(k)k*k+k,k-k.kCkDkEkFk/k:k;k=k?k@k[k(l)l*l:m;m1g2gXeYe3g4g5g6g7gMbNb8gZe9g!g#g$gObPb%g'g0e1e(g)g*g+g,gQbRb-g2e.g/g:g;gSbTb=g?g@g3e[g]g^g_g`g4e{g|g}g~g5e6eahbhchdhehUbVbfh7eghhhihjhWbXbkhlh8e9emhnhohphqhYbZbrh!eshthuhvh0b1bwhxh#e$eyhzhAhBhCh2b3bDh%eEhFhGhHh4b5bIhJh'e(eKhLhMhNhOh6b7bPh)eQhRhShTh8b9bUhVhWh*eXhYhZh0h1h+e2h3h4h5h6h7h,e8h9hvd5d!h#h$h*dwd+dh i j k b c d e ,d-dMd%h'h(h-e.d)h*h/d.e+h:d/e;d,h-h.h=d?d:e/h@d[d9d!d;e=e#dNd:h]df ;h=hl m n o p ?h@h[h]hg ^hq _h$d`h?e@e{h|h}hai!b#bbi[eciGk$b%bdi]e^eeifigihi'b(bii_ejiHk)b*bfe`e{eki|eZ 0 }e~eli1 2 miafbfnioipiqi+b,bricfsiIk-b.bgeheies t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 tidfefuiviwixi/b:byiffziJk;b=bAigfhfBiCiDiEi?b@bFiifGiKk[b]bjf^djekekflew x melfmfy z HinfofIiJiKiLi^b_bMipfNiLk`b{bqfrf7 8 9 ! sf# $ % ' netfufvf( ) wfOi* + xfoepeyfzfAfBf, - CfqeDfPi. / : ; = ? @ [ ] ^ _ QiEfFfRiSiTiUi|b}bViGfWiMk~bacHfIfJfKfLf` { reMf| } XiNfOfYiZi0i1ibccc2iPf3iNkdcec_dseteueA B C D veQfRfSf~ abTfbbcb4iUfVf5i6i7i8ifcgc9iWf!iOkhcic#iXfYf$i%i'i(ijckc)iZf*ilcmc+i0f1f,i-i.i/incoc:i2f;iPkpcqcdb=i3f4f?i@i[i]ircsc^i5f_iQktcucwe6f7f`i8febfb9f!f{igbhb|i#f$f}i~iajbjvcwccj%fdjRkxcycxeyezeE F G H gdzcAchdidjdkdI J ldBcmdudK L ej'f(ffjgjhjijCcDcjj)fkjSkEcFclj*f+fmjnjojpjGcHcqj,frjTkIcJc-f`dAeBe.fCeM N De/f:fO P sj;f=ftjujvjwjKcLcxj?fyjUkMcNc@f[fibjbkblb]fmbnbobpbEe^f_f`fqbrb{fzjsbtbFe{d|dGeHeIeJeQ R Ke}dLe|fS T ubvbwbxbybzbAbBbCbAj}f~fBjCjDjEjOcPcFjagGjVkQcRcbgcgdgegfgDbEbMeggFbGbHjhgigIjJjKjLjScTcMjjgNjWkUcVc~dNeOePeU V W X QekglgmgHbIbngJbKbOjogpgPjQjRjSjWcXcTjqgUjXkYcZcVjrgsgWjXjYjZj0c1c0jtg1j2c3c2jugvg3j4j5j6j4c5c7jwg8jYk6c7cLb9jxgyg!j#j$j%j8c9c'jzg(jZk!c#c)jAgBg*j+j,j-j$c%c.jCg/j0k'c(c:jDgEg;j=j?j@j)c*c[jFg]j1k+c,c^jGgHg_j`j{j|j-c.c}jIg~j2k/c:cakJgKgbkckdkek;c=cfkLggk4k?c@chkMgNgikjkkklk[c]cmkOgnk6k^c_cokPgQgpkqkrksk`c{ctkRguk7k|c}cvkSgTgwkxkykzk~cadAkUgBk8kbdcd

141  

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

143 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

146  

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

148 """ 

149 return self._entry.allocate(size, device=device, memory_type=memory_type, peer_access=peer_access) 2)m*m+m,m-maeVg7dWgXgYgWeZg0g.m!k#k$k%kCkDkEkFk/k:k;k=k?k@k[k(l)l*l1g2gYe3g4g5g8gZe9g!g#g$g%g'g1e(g)g*g-g2e.g/g:g;g=g?g@g3e[g]g^g_g`g4e{g|g}g~g6eahbhchfh7eghhhihjhkhlh9emhnhohrh!eshthuhvhwhxh$eyhzhAhDh%eEhFhGhHhIhJh(eKhLhMhPh)eQhRhShThUhVhWh*eXhYhZh0h1h+e2h3h5h6h7h,e8h9h#h$h+d'h)h`h@e}h[ecidi^egi_ejife`e{eki|eZ 0 }e~eli1 2 mibfpicfsindedqdfdtdtiefwiffziAihfDiifGijf^djekekflew x melfmfy z HiofKipfNinetfufvf( ) wfOi* + xfpeAfqeDfQiFfTiGfWiKfreMfXiOf0iPf3i_dseteueA B C D veQfRfSf~ abTfbbcb4iVf7iWf!i#iYf'iZf*i+i1f.i2f;i=i4f[i5f_iwe6f7f`i8febfb9f!f{igbhb|i$faj%fdjgdAcjdBcmdej(fhj)fkjlj+foj,frj-f`dAeBe.fCeM N De/f:fO P sj=fvj?fyjEe^f_f`fqbrb{fzjsbtbFe|dIe}dLeAj~fDjagGjegMeggHjigKjjgNj~dNeOePeU V W X QekglgmgHbIbngJbKbOjpgRjqgUjVjsgYjtg1j2jvg5jwg8j9jyg$jzg(j)jBg,jCg/j:jEg?jFg]j^jHg{jIg~jakKgdkLggkhkNgkkOgnkokQgrkRgukvkTgykUgBk

150  

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

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

153  

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

155 """ 

156 return self._entry.deallocate(dptr) 2!h

157  

158 def memset( 

159 self, 

160 dst: Buffer | int, 

161 value, 

162 size_t width, 

163 size_t height=1, 

164 size_t pitch=0, 

165 *, 

166 dst_owner=None, 

167 ) -> MemsetNode: 

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

169  

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

171 """ 

172 return self._entry.memset( 29d!d;e=e#dg q

173 dst, value, width, height=height, pitch=pitch, dst_owner=dst_owner 29d!d;e=e#dg q

174 ) 

175  

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

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

178  

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

180 """ 

181 return self._entry.launch(config, kernel, *args) 21d8d*k+k,k-k.k:m;mXe0e5e8e#e'e*db c d e Md/d.e+h:d/e;dNdl m n o p g $d?ebi]eiife}eafrigeheies t u v ddsddfyigfFi^dmenfMineoeCfEfViHfIfJfKfLf` { reMf| } Nf2i_dveUf9iXf)i0f:i3f^iwe9f#fcjxeyezeE F G H zcld'fjj*fqj`dDe;fxjEe{dKe}fFjbgcgdgegfgDbEbMeggFbGbhgMj~dQeogTjrg0jug7jxg'jAg.jDg[jGg}jJgfkMgmkPgtkSgAk

182  

183 def empty(self) -> EmptyNode: 

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

185  

186 Returns 

187 ------- 

188 EmptyNode 

189 A new EmptyNode with no dependencies. 

190 """ 

191 return self._entry.join() 2Y 4h5d?h@h[h]h^h_h

192  

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

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

195  

196 Parameters 

197 ---------- 

198 *nodes : GraphNode 

199 Nodes to merge. 

200  

201 Returns 

202 ------- 

203 EmptyNode 

204 A new EmptyNode that depends on all input nodes. 

205 """ 

206 return self._entry.join(*nodes) 2WeCkDkEkFk(l)l*lYeZe1e2e3e4e6e7e9e!e$e%e(e)e*e+e,el m n o p @e[e^e_e~ebfcfedfdefffhfifjf^djekekflew x melfmfy z ofpfwfpeqeFfGfreOfPf_dseteueA B C D TfVfWfYfZf1f2f4f5f!f$f%fAcBc(f)f+f,f-f`dAeBe.fCeM N De/f:fO P =f?f{f|d}d~fagMeigjg~dNeOePeU V W X ngpgqgsgtgvgwgygzgBgCgEgFgHgIgKgLgNgOgQgRgTgUg

207  

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

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

210  

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

212 """ 

213 return self._entry.memcpy(dst, src, size, dst_owner=dst_owner, src_owner=src_owner) 2,h-h.h=d?d:e/h@d[d;h

214  

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

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

217  

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

219 """ 

220 return self._entry.embed(child) 28dXe0e5e8e#e'eMdNd?e]efeafgeheies t u v dddfgf^dnfneoeEfHfNf_dveUfXf0f3fwe#fxeyezeE F G H zc'f*f`d;fEe{d}fbghg~dQeogrgugxgAgDgGgJgMgPgSg

221  

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

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

224  

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

226 """ 

227 return self._entry.record(event) 2'k%h(h-e.d{hei`enigeoduiBijeIiqfrf7 8 9 ! tfyfRiIfYiseQf5i$i,i?i6f}ixehdfjmjAetj@f[fibjbkblb^fGeBjcgIjNekgPjWj3j!j*j;j_jbkikpkwk

228  

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

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

231  

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

233 """ 

234 return self._entry.wait(event) 2*h|hfi{eoihepdviCikeJiqfsf# $ % ' ufzfSiJfZiteRf6i%i-i@i7f~iyeidgjnjBeuj@f]fmbnbobpb_fHeCjdgJjOelgQjXj4j#j+j=j`jckjkqkxk

235  

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

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

238  

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

240 """ 

241 return self._entry.callback(fn, user_data=user_data) 29k/m(k)k6g7g+g,gdhehphqhBhChNhOh,d-d:h]d=haihi|eqiierdxiEileLirfsfvfBf: ; = ? UiLf1iueSf8i(i/i]i8fbjzekdijpjCewj[f]f`fJeubvbwbxbEjfgLjPemgSjZj6j%j-j@j|jeklkskzk

242  

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

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

245  

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

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

248 via ``cudaGraphSetConditional``. 

249  

250 Parameters 

251 ---------- 

252 default_value : int, optional 

253 The default value to assign to the condition. 

254 If None, no default is assigned. 

255  

256 Returns 

257 ------- 

258 GraphCondition 

259 A condition variable for controlling conditional execution. 

260 """ 

261 cdef cydriver.CUgraphConditionalHandle c_handle 

262 cdef unsigned int flags = 0 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

263 cdef unsigned int default_val = 0 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

264  

265 if default_value is not None: 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

266 default_val = <unsigned int>default_value 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvdwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

267 flags = cydriver.CU_GRAPH_COND_ASSIGN_DEFAULT 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvdwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

268  

269 cdef cydriver.CUcontext ctx = NULL 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

270 with nogil: 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

271 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

272 HANDLE_RETURN(cydriver.cuGraphConditionalHandleCreate( 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

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

274  

275 return GraphCondition._from_handle(c_handle) 2r MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd4dwdh i j k b c d e f xd!b#b$b%bOd'b(b)b*bZ 0 1 2 Pd+b,b-b.bs t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 Qd/b:b;b=bRd?b@b[b]bw x y z Sd^b_b`b{b7 8 9 ! # $ % ' ( ) * + Cd, - . / : ; = ? @ [ ] ^ _ Td|b}b~bac` { | } UdbcccdcecA B C D ~ abbbcbVdfcgchcicjckclcmcWdncocpcqcdbXdrcsctcucebfbgbhbDdvcwcxcycE F G H gdzcAchdidjdkdI J ldBcmdudK L EdCcDcEcFcFdGcHcIcJcM N O P GdKcLcMcNcibjbkblbmbnbobpbqbrbsbtbzdQ R S T ubvbwbxbybzbAbBbCbHdOcPcQcRcDbEbFbGbIdScTcUcVcU V W X HbIbJbKbJdWcXcYcZc0c1c2c3cKd4c5c6c7cLbYd8c9c!c#cLd$c%c'c(cZd)c*c+c,c0d-c.c/c:cAd;c=c?c@cBd[c]c^c_c2d`c{c|c}c3d~cadbdcd

276  

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

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

279  

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

281 """ 

282 return self._entry.if_then(condition) 2r NbRbVbZb3b7bvdh b #b(b0 ,bt 4 :b@bx _b8 $ ) - ; ] ^ _ }b{ ccB abgckcocscfbwcF J DcHcN LcjbnbrbR vbAbBbCbPcEbTcV IbXc1c5c9c%c*c.c=c]c{cad

283  

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

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

286  

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

288 """ 

289 return self._entry.if_else(condition) 2MbQbUbYb2b6bi c !b'bZ +bs 3 /b?bw ^b7 # ( , : @ [ ] |b` bcA ~ fcjcncrcebvcE I CcGcM KcibmbqbQ ubybzbAbOcDbScU HbWc0c4c8c$c)c-c;c[c`c~c

290  

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

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

293  

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

295 """ 

296 return self._entry.while_loop(condition) 2PbTbXb1b5b9bk e f %b*b2 .bv 6 =b]bz {b! ' + / ? [ _ ac} ecD cbicmcqcdbuchbycH L FcJcP NclbpbtbT xbzbCbRcGbVcX KbZc3c7cLb#c(c,c:c@c_c}ccd

297  

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

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

300  

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

302 """ 

303 return self._entry.switch(condition, count) 2ObSbWb0b4b8bwdj d $b)b1 -bu 5 ;b[by `b9 % * . = @ ^ ~b| dcC bbhclcpcdbtcgbxcG K EcIcO MckbobsbS wbybBbQcFbUcW JbYc2c6cLb!c'c+c/c?c^c|cbd

304  

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

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

307  

308 Parameters 

309 ---------- 

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

311 Customizable dataclass for graph instantiation options. 

312  

313 Returns 

314 ------- 

315 Graph 

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

317 """ 

318 from cuda.core.graph._graph_builder import _instantiate_graph 29k!k#k$k%k8d'k(k)k*k+k,k-k.kCkDkEkFk/k:k;k=k?m@m[m?k@k[k*d+d,d-d.d/d:d;d=d?d@d[d9d!d#d]dl m n o p g $d

319  

320 return _instantiate_graph( 29k!k#k$k%k8d'k(k)k*k+k,k-k.kCkDkEkFk/k:k;k=k?m@m[m?k@k[k*d+d,d-d.d/d:d;d=d?d@d[d9d!d#d]dl m n o p g $d

321 driver.CUgraph(as_intptr(self._h_graph)), options) 29k!k#k$k%k8d'k(k)k*k+k,k-k.kCkDkEkFk/k:k;k=k?m@m[m?k@k[k*d+d,d-d.d/d:d;d=d?d@d[d9d!d#d]dl m n o p g $d

322  

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

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

325  

326 Parameters 

327 ---------- 

328 path : str 

329 File path for the DOT output. 

330 options : GraphDebugPrintOptions, optional 

331 Customizable options for the debug print. 

332 """ 

333 from cuda.core.graph._graph_builder import GraphDebugPrintOptions 2aeVg7d

334  

335 cdef unsigned int flags = 0 2aeVg7d

336 if options is not None: 2aeVg7d

337 if not isinstance(options, GraphDebugPrintOptions): 2Vg7d

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

339 flags = options._to_flags() 27d

340  

341 cdef bytes path_bytes = path.encode('utf-8') 2ae7d

342 cdef const char* c_path = path_bytes 2ae7d

343 with nogil: 2ae7d

344 HANDLE_RETURN(cydriver.cuGraphDebugDotPrint(as_cu(self._h_graph), c_path, flags)) 2ae7d

345  

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

347 """Return all nodes in the graph. 

348  

349 Returns 

350 ------- 

351 set of GraphNode 

352 All nodes in the graph. 

353 """ 

354 cdef vector[cydriver.CUgraphNode] nodes_vec 

355 nodes_vec.resize(128) 26d1dReSeTer Y Ue]k^k%d_k`k{k|k'd(d}k~kalblcldlVe)delflglVlhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIl5dh i j k b c d e MdNdf l m n o p g q

356 cdef size_t num_nodes = 128 26d1dReSeTer Y Ue]k^k%d_k`k{k|k'd(d}k~kalblcldlVe)delflglVlhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIl5dh i j k b c d e MdNdf l m n o p g q

357  

358 with nogil: 26d1dReSeTer Y Ue]k^k%d_k`k{k|k'd(d}k~kalblcldlVe)delflglVlhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIl5dh i j k b c d e MdNdf l m n o p g q

359 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 26d1dReSeTer Y Ue]k^k%d_k`k{k|k'd(d}k~kalblcldlVe)delflglVlhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIl5dh i j k b c d e MdNdf l m n o p g q

360  

361 if num_nodes == 0: 26d1dReSeTer Y Ue]k^k%d_k`k{k|k'd(d}k~kalblcldlVe)delflglVlhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIl5dh i j k b c d e MdNdf l m n o p g q

362 return set() 21dVlh i j k f

363  

364 if num_nodes > 128: 26dReSeTer Y Ue]k^k%d_k`k{k|k'd(d}k~kalblcldlVe)delflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIl5db c d e MdNdf l m n o p g q

365 nodes_vec.resize(num_nodes) 

366 with nogil: 

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

368  

369 return {GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes)} 26dReSeTer Y Ue]k^k%d_k`k{k|k'd(d}k~kalblcldlVe)delflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIl5db c d e MdNdf l m n o p g q

370  

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

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

373  

374 Returns 

375 ------- 

376 set of tuple 

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

378 a dependency edge in the graph. 

379 """ 

380 cdef vector[cydriver.CUgraphNode] from_nodes 

381 cdef vector[cydriver.CUgraphNode] to_nodes 

382 from_nodes.resize(128) 2beceJlKldeeeLlY l m n o p g q

383 to_nodes.resize(128) 2beceJlKldeeeLlY l m n o p g q

384 cdef size_t num_edges = 128 2beceJlKldeeeLlY l m n o p g q

385  

386 with nogil: 2beceJlKldeeeLlY l m n o p g q

387 IF CUDA_CORE_BUILD_MAJOR >= 13: 

388 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2beceJlKldeeeLlY l m n o p g q

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

390 ELSE: 

391 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

393  

394 if num_edges == 0: 2beceJlKldeeeLlY l m n o p g q

395 return set() 2JlKlLlq

396  

397 if num_edges > 128: 2becedeeeY l m n o p g q

398 from_nodes.resize(num_edges) 

399 to_nodes.resize(num_edges) 

400 with nogil: 

401 IF CUDA_CORE_BUILD_MAJOR >= 13: 

402 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

404 ELSE: 

405 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

407  

408 return { 2becedeeeY l m n o p g q

409 (GraphNode._create(self._h_graph, from_nodes[i]), 2becedeeeY l m n o p g q

410 GraphNode._create(self._h_graph, to_nodes[i])) 2becedeeeY l m n o p g q

411 for i in range(num_edges) 2becedeeeY l m n o p g q

412 } 

413  

414 @property 

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

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

417 return as_py(self._h_graph) 2{m-e.e/e:e$d~h