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

125 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-06-13 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 

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._module import Kernel 

37 from cuda.core.graph._graph_builder import ( 

38 Graph, 

39 GraphCompleteOptions, 

40 GraphDebugPrintOptions, 

41 ) 

42 from cuda.core.graph._subclasses import ( 

43 AllocNode, 

44 ChildGraphNode, 

45 EmptyNode, 

46 EventRecordNode, 

47 EventWaitNode, 

48 FreeNode, 

49 HostCallbackNode, 

50 IfElseNode, 

51 IfNode, 

52 KernelNode, 

53 MemcpyNode, 

54 MemsetNode, 

55 SwitchNode, 

56 WhileNode, 

57 ) 

58  

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

60  

61  

62cdef class GraphCondition: 

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

64  

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

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

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

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

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

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

71  

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

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

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

75 condition. 

76 """ 

77  

78 @staticmethod 

79 cdef GraphCondition _from_handle(cydriver.CUgraphConditionalHandle c_handle): 

80 cdef GraphCondition self = GraphCondition.__new__(GraphCondition) 2WlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,lq MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e -l.lxd!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_c1d`c{c|c}c2d~cadbdcd

81 self._c_handle = c_handle 2WlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,lq MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e -l.lxd!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_c1d`c{c|c}c2d~cadbdcd

82 return self 2WlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,lq MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e -l.lxd!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_c1d`c{c|c}c2d~cadbdcd

83  

84 def __repr__(self) -> str: 

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

86  

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

88 if not isinstance(other, GraphCondition): 24m5m6m7m9d!dJe#dxdDdgdzcAchdidjdkdI J ldBcmdudK L EdFdGdzdHdIdJdKdLdAdBd

89 return NotImplemented 2xdDdgdzcAchdidjdkdI J ldBcmdudK L EdFdGdzdHdIdJdKd

90 return self._c_handle == (<GraphCondition>other)._c_handle 24m5m6m7m9d!dJe#dxdLdAdBd

91  

92 def __hash__(self) -> int: 

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

94  

95 @property 

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

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

98 return <unsigned long long>self._c_handle 2WlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.lxd

99  

100  

101cdef class GraphDefinition: 

102 """A graph definition. 

103  

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

105 and specifying dependencies. Once construction is complete, call 

106 instantiate() to obtain an executable Graph. 

107 """ 

108  

109 def __init__(self): 

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

111 cdef cydriver.CUgraph graph = NULL 2/l:l;l=l?l@l[l]l^lHgIgJg_lKeKgLg`l{l|l}l~lY ambmcmdm6demfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImMgNgLeMeOgPgQgRgSgMbNbTgNeUgVgWgXgObPbYgZgOePe0g1g2g3g4gQbRb5gQe6g7g8g9gSbTb!g#g$gJmRe%g'g(g)g*gSe+g,g-g.gTeUe/g:g;g=g?gUbVb@gVe[g]g^g_gWbXb`g{gWeXe|g}g~gahbhYbZbchYedhehfhgh0b1bhhihZe0ejhkhlhmhnh2b3boh1ephqhrhsh4b5bthuh2e3evhwhxhyhzh6b7bAh4eBhChDhEh8b9bFhGhHh5eIhJhKhLhMh6eNhOhPhQhRhSh7eThUhvdKmLmMmNm3dOm4dVhWhXh$dwd%dg h i j a b c d 'd(dMdYhZh0h8e)d1h2h*d9e3h+d!e,dNd-de k l m n o 4h5h6h7hp 8hr 9h7d!h#exd$e#h$h%h'h(h!b#b)h%e*hkk$b%b+h'eOd(e,h-h.hAl/h'b(b:h)e;hlk)b*b{d*e+e=h,eZ 0 -e.e?h1 2 @h/ePd:e[h]h^hBl_h+b,b`h;e{hmk-b.b|d}d~ds t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 |h=eQd?e}h~haiClbi/b:bci@edink;b=bei[eRd]efigihiDlii?b@bji^ekiok[b]b_e.daebe`ecew x de{e|ey z li}eSd~eminioiElpi^b_bqiafripk`b{bbfcf7 8 9 ! df# $ % ' eeefffgf( ) hfsi* + iffeCdgejfkflfmf, - nfheofti. / : ; = ? @ [ ] ^ _ uipfTdqfviwixiFlyi|b}bzirfAiqk~bacsftfufvfwf` { iexf| } BiyfUdzfCiDiEiGlFibcccGiAfHirkdcec/djekeleA B C D meBfCfDf~ abEfbbcbIiFfVdGfJiKiLiHlMifcgcNiHfOiskhcicPiIfJfQiRiSiTijckcUiKfVilcmcWiLfWdMfXiYiZiIl0incoc1iNf2itkpcqcdb3iOfXdPf4i5i6iJl7ircsc8iQf9iuktcucneRfSf!iTfebfbUfVf#igbhb$iWfDdXf%i'i(iql)ivcwc*iYf+ivkxcycoepeqeE F G H gdzcAchdidjdkdI J ldBcmdudK L ,iZfEd0f-i.i/irl:iCcDc;i1f=iwkEcFc?i2fFd3f@i[i]isl^iGcHc_i4f`ixkIcJc5f:drese6fteM N ue7f8fO P {i9fGd!f|i}i~itlajKcLcbj#fcjykMcNc$f%fibjbkblb'fmbnbobpbve(f)f*fqbrb+fdjsbtbwe;dzd=dxeyezeAeQ R Be?dCe,fS T ubvbwbxbybzbAbBbCbej-fHd.ffjgjhjulijOcPcjj/fkjzkQcRc:f;f=f?f@fDbEbDe[fFbGblj]fId^fmjnjojvlpjScTcqj_frjAkUcVc@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsj~fJdagtjujvjwlwjWcXcxjbgyjBkYcZczjcgdgAjBjCjDj0c1cEjegFj2c3cGjfgKdggHjIjJjxlKj4c5cLjhgMjCk6c7cLbNjigYdjgOjPjQjKlRj8c9cSjkgTjDk!c#cUjlgLdmgVjWjXjylYj$c%cZjng0jEk'c(c1jogZdpg2j3j4jLl5j)c*c6jqg7jFk+c,c8jrg0dsg9j!j#jMl$j-c.c%jtg'jGk/c:c(jugAdvg)j*j+jHk,j;c=c-jwg.jIk?c@c/jxgBdyg:j;j=jJk?j[c]c@jzg[jKk^c_c]jAg1dBg^j_j`jPm{j`c{c|jCg}jLk|c}c~jDg2dEgakbkckQmdk~cadekFgfkMkbdcd

112 with nogil: 2/l:l;l=l?l@l[l]l^lHgIgJg_lKeKgLg`l{l|l}l~lY ambmcmdm6demfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImMgNgLeMeOgPgQgRgSgMbNbTgNeUgVgWgXgObPbYgZgOePe0g1g2g3g4gQbRb5gQe6g7g8g9gSbTb!g#g$gJmRe%g'g(g)g*gSe+g,g-g.gTeUe/g:g;g=g?gUbVb@gVe[g]g^g_gWbXb`g{gWeXe|g}g~gahbhYbZbchYedhehfhgh0b1bhhihZe0ejhkhlhmhnh2b3boh1ephqhrhsh4b5bthuh2e3evhwhxhyhzh6b7bAh4eBhChDhEh8b9bFhGhHh5eIhJhKhLhMh6eNhOhPhQhRhSh7eThUhvdKmLmMmNm3dOm4dVhWhXh$dwd%dg h i j a b c d 'd(dMdYhZh0h8e)d1h2h*d9e3h+d!e,dNd-de k l m n o 4h5h6h7hp 8hr 9h7d!h#exd$e#h$h%h'h(h!b#b)h%e*hkk$b%b+h'eOd(e,h-h.hAl/h'b(b:h)e;hlk)b*b{d*e+e=h,eZ 0 -e.e?h1 2 @h/ePd:e[h]h^hBl_h+b,b`h;e{hmk-b.b|d}d~ds t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 |h=eQd?e}h~haiClbi/b:bci@edink;b=bei[eRd]efigihiDlii?b@bji^ekiok[b]b_e.daebe`ecew x de{e|ey z li}eSd~eminioiElpi^b_bqiafripk`b{bbfcf7 8 9 ! df# $ % ' eeefffgf( ) hfsi* + iffeCdgejfkflfmf, - nfheofti. / : ; = ? @ [ ] ^ _ uipfTdqfviwixiFlyi|b}bzirfAiqk~bacsftfufvfwf` { iexf| } BiyfUdzfCiDiEiGlFibcccGiAfHirkdcec/djekeleA B C D meBfCfDf~ abEfbbcbIiFfVdGfJiKiLiHlMifcgcNiHfOiskhcicPiIfJfQiRiSiTijckcUiKfVilcmcWiLfWdMfXiYiZiIl0incoc1iNf2itkpcqcdb3iOfXdPf4i5i6iJl7ircsc8iQf9iuktcucneRfSf!iTfebfbUfVf#igbhb$iWfDdXf%i'i(iql)ivcwc*iYf+ivkxcycoepeqeE F G H gdzcAchdidjdkdI J ldBcmdudK L ,iZfEd0f-i.i/irl:iCcDc;i1f=iwkEcFc?i2fFd3f@i[i]isl^iGcHc_i4f`ixkIcJc5f:drese6fteM N ue7f8fO P {i9fGd!f|i}i~itlajKcLcbj#fcjykMcNc$f%fibjbkblb'fmbnbobpbve(f)f*fqbrb+fdjsbtbwe;dzd=dxeyezeAeQ R Be?dCe,fS T ubvbwbxbybzbAbBbCbej-fHd.ffjgjhjulijOcPcjj/fkjzkQcRc:f;f=f?f@fDbEbDe[fFbGblj]fId^fmjnjojvlpjScTcqj_frjAkUcVc@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsj~fJdagtjujvjwlwjWcXcxjbgyjBkYcZczjcgdgAjBjCjDj0c1cEjegFj2c3cGjfgKdggHjIjJjxlKj4c5cLjhgMjCk6c7cLbNjigYdjgOjPjQjKlRj8c9cSjkgTjDk!c#cUjlgLdmgVjWjXjylYj$c%cZjng0jEk'c(c1jogZdpg2j3j4jLl5j)c*c6jqg7jFk+c,c8jrg0dsg9j!j#jMl$j-c.c%jtg'jGk/c:c(jugAdvg)j*j+jHk,j;c=c-jwg.jIk?c@c/jxgBdyg:j;j=jJk?j[c]c@jzg[jKk^c_c]jAg1dBg^j_j`jPm{j`c{c|jCg}jLk|c}c~jDg2dEgakbkckQmdk~cadekFgfkMkbdcd

113 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2/l:l;l=l?l@l[l]l^lHgIgJg_lKeKgLg`l{l|l}l~lY ambmcmdm6demfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImMgNgLeMeOgPgQgRgSgMbNbTgNeUgVgWgXgObPbYgZgOePe0g1g2g3g4gQbRb5gQe6g7g8g9gSbTb!g#g$gJmRe%g'g(g)g*gSe+g,g-g.gTeUe/g:g;g=g?gUbVb@gVe[g]g^g_gWbXb`g{gWeXe|g}g~gahbhYbZbchYedhehfhgh0b1bhhihZe0ejhkhlhmhnh2b3boh1ephqhrhsh4b5bthuh2e3evhwhxhyhzh6b7bAh4eBhChDhEh8b9bFhGhHh5eIhJhKhLhMh6eNhOhPhQhRhSh7eThUhvdKmLmMmNm3dOm4dVhWhXh$dwd%dg h i j a b c d 'd(dMdYhZh0h8e)d1h2h*d9e3h+d!e,dNd-de k l m n o 4h5h6h7hp 8hr 9h7d!h#exd$e#h$h%h'h(h!b#b)h%e*hkk$b%b+h'eOd(e,h-h.hAl/h'b(b:h)e;hlk)b*b{d*e+e=h,eZ 0 -e.e?h1 2 @h/ePd:e[h]h^hBl_h+b,b`h;e{hmk-b.b|d}d~ds t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 |h=eQd?e}h~haiClbi/b:bci@edink;b=bei[eRd]efigihiDlii?b@bji^ekiok[b]b_e.daebe`ecew x de{e|ey z li}eSd~eminioiElpi^b_bqiafripk`b{bbfcf7 8 9 ! df# $ % ' eeefffgf( ) hfsi* + iffeCdgejfkflfmf, - nfheofti. / : ; = ? @ [ ] ^ _ uipfTdqfviwixiFlyi|b}bzirfAiqk~bacsftfufvfwf` { iexf| } BiyfUdzfCiDiEiGlFibcccGiAfHirkdcec/djekeleA B C D meBfCfDf~ abEfbbcbIiFfVdGfJiKiLiHlMifcgcNiHfOiskhcicPiIfJfQiRiSiTijckcUiKfVilcmcWiLfWdMfXiYiZiIl0incoc1iNf2itkpcqcdb3iOfXdPf4i5i6iJl7ircsc8iQf9iuktcucneRfSf!iTfebfbUfVf#igbhb$iWfDdXf%i'i(iql)ivcwc*iYf+ivkxcycoepeqeE F G H gdzcAchdidjdkdI J ldBcmdudK L ,iZfEd0f-i.i/irl:iCcDc;i1f=iwkEcFc?i2fFd3f@i[i]isl^iGcHc_i4f`ixkIcJc5f:drese6fteM N ue7f8fO P {i9fGd!f|i}i~itlajKcLcbj#fcjykMcNc$f%fibjbkblb'fmbnbobpbve(f)f*fqbrb+fdjsbtbwe;dzd=dxeyezeAeQ R Be?dCe,fS T ubvbwbxbybzbAbBbCbej-fHd.ffjgjhjulijOcPcjj/fkjzkQcRc:f;f=f?f@fDbEbDe[fFbGblj]fId^fmjnjojvlpjScTcqj_frjAkUcVc@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsj~fJdagtjujvjwlwjWcXcxjbgyjBkYcZczjcgdgAjBjCjDj0c1cEjegFj2c3cGjfgKdggHjIjJjxlKj4c5cLjhgMjCk6c7cLbNjigYdjgOjPjQjKlRj8c9cSjkgTjDk!c#cUjlgLdmgVjWjXjylYj$c%cZjng0jEk'c(c1jogZdpg2j3j4jLl5j)c*c6jqg7jFk+c,c8jrg0dsg9j!j#jMl$j-c.c%jtg'jGk/c:c(jugAdvg)j*j+jHk,j;c=c-jwg.jIk?c@c/jxgBdyg:j;j=jJk?j[c]c@jzg[jKk^c_c]jAg1dBg^j_j`jPm{j`c{c|jCg}jLk|c}c~jDg2dEgakbkckQmdk~cadekFgfkMkbdcd

114 self._h_graph = create_graph_handle(graph) 2/l:l;l=l?l@l[l]l^lHgIgJg_lKeKgLg`l{l|l}l~lY ambmcmdm6demfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImMgNgLeMeOgPgQgRgSgMbNbTgNeUgVgWgXgObPbYgZgOePe0g1g2g3g4gQbRb5gQe6g7g8g9gSbTb!g#g$gJmRe%g'g(g)g*gSe+g,g-g.gTeUe/g:g;g=g?gUbVb@gVe[g]g^g_gWbXb`g{gWeXe|g}g~gahbhYbZbchYedhehfhgh0b1bhhihZe0ejhkhlhmhnh2b3boh1ephqhrhsh4b5bthuh2e3evhwhxhyhzh6b7bAh4eBhChDhEh8b9bFhGhHh5eIhJhKhLhMh6eNhOhPhQhRhSh7eThUhvdKmLmMmNm3dOm4dVhWhXh$dwd%dg h i j a b c d 'd(dMdYhZh0h8e)d1h2h*d9e3h+d!e,dNd-de k l m n o 4h5h6h7hp 8hr 9h7d!h#exd$e#h$h%h'h(h!b#b)h%e*hkk$b%b+h'eOd(e,h-h.hAl/h'b(b:h)e;hlk)b*b{d*e+e=h,eZ 0 -e.e?h1 2 @h/ePd:e[h]h^hBl_h+b,b`h;e{hmk-b.b|d}d~ds t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 |h=eQd?e}h~haiClbi/b:bci@edink;b=bei[eRd]efigihiDlii?b@bji^ekiok[b]b_e.daebe`ecew x de{e|ey z li}eSd~eminioiElpi^b_bqiafripk`b{bbfcf7 8 9 ! df# $ % ' eeefffgf( ) hfsi* + iffeCdgejfkflfmf, - nfheofti. / : ; = ? @ [ ] ^ _ uipfTdqfviwixiFlyi|b}bzirfAiqk~bacsftfufvfwf` { iexf| } BiyfUdzfCiDiEiGlFibcccGiAfHirkdcec/djekeleA B C D meBfCfDf~ abEfbbcbIiFfVdGfJiKiLiHlMifcgcNiHfOiskhcicPiIfJfQiRiSiTijckcUiKfVilcmcWiLfWdMfXiYiZiIl0incoc1iNf2itkpcqcdb3iOfXdPf4i5i6iJl7ircsc8iQf9iuktcucneRfSf!iTfebfbUfVf#igbhb$iWfDdXf%i'i(iql)ivcwc*iYf+ivkxcycoepeqeE F G H gdzcAchdidjdkdI J ldBcmdudK L ,iZfEd0f-i.i/irl:iCcDc;i1f=iwkEcFc?i2fFd3f@i[i]isl^iGcHc_i4f`ixkIcJc5f:drese6fteM N ue7f8fO P {i9fGd!f|i}i~itlajKcLcbj#fcjykMcNc$f%fibjbkblb'fmbnbobpbve(f)f*fqbrb+fdjsbtbwe;dzd=dxeyezeAeQ R Be?dCe,fS T ubvbwbxbybzbAbBbCbej-fHd.ffjgjhjulijOcPcjj/fkjzkQcRc:f;f=f?f@fDbEbDe[fFbGblj]fId^fmjnjojvlpjScTcqj_frjAkUcVc@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsj~fJdagtjujvjwlwjWcXcxjbgyjBkYcZczjcgdgAjBjCjDj0c1cEjegFj2c3cGjfgKdggHjIjJjxlKj4c5cLjhgMjCk6c7cLbNjigYdjgOjPjQjKlRj8c9cSjkgTjDk!c#cUjlgLdmgVjWjXjylYj$c%cZjng0jEk'c(c1jogZdpg2j3j4jLl5j)c*c6jqg7jFk+c,c8jrg0dsg9j!j#jMl$j-c.c%jtg'jGk/c:c(jugAdvg)j*j+jHk,j;c=c-jwg.jIk?c@c/jxgBdyg:j;j=jJk?j[c]c@jzg[jKk^c_c]jAg1dBg^j_j`jPm{j`c{c|jCg}jLk|c}c~jDg2dEgakbkckQmdk~cadekFgfkMkbdcd

115  

116 @staticmethod 

117 cdef GraphDefinition _from_handle(GraphHandle h_graph): 

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

119 cdef GraphDefinition g = GraphDefinition.__new__(GraphDefinition) 2q IeMbNbObPb8dQbRbSbTbNlOlPlQlRlSlUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bg h i j a b c d MdNde !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

120 g._h_graph = h_graph 2q IeMbNbObPb8dQbRbSbTbNlOlPlQlRlSlUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bg h i j a b c d MdNde !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 return g 2q IeMbNbObPb8dQbRbSbTbNlOlPlQlRlSlUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bg h i j a b c d MdNde !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  

123 def __repr__(self) -> str: 

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

125  

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

127 if not isinstance(other, GraphDefinition): 28d9d!d#dNlOlPlQlRlSl'hqlrlsltlwe;dzd=dxeyezeAeQ R Be?dCe,fS T ulvlwlxlylHkJk

128 return NotImplemented 2'hqlrlsltlwe;dzd=dxeyezeAeQ R Be?dCe,fS T ulvlwlxl

129 return as_intptr(self._h_graph) == as_intptr((<GraphDefinition>other)._h_graph) 28d9d!d#dNlOlPlQlRlSl'hylHkJk

130  

131 def __hash__(self) -> int: 

132 return hash(as_intptr(self._h_graph)) 2AlBlClDlEliffeCdgejfkflfmf, - nfheofti. / FlGlHlIlJlLlMlHkJk

133  

134 @property 

135 def _entry(self) -> GraphNode: 

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

137 cdef GraphNode n = GraphNode.__new__(GraphNode) 2RmSmTmUmVmq [dGg5dHgIgJgKeKgLgWm0mNkXmY OkPkQkRk6dSkTkUkVkWkXkYkZkgkhkikjk0k1k2k3k4k5k6kTlUlVlYmZmMgNgLeMeOgPgQgRgSgMbNbTgNeUgVgWgXgObPbYgZgOePe0g1g2g3g4gQbRb5gQe6g7g8g9gSbTb!g#g$gRe%g'g(g)g*gSe+g,g-g.gTeUe/g:g;g=g?gUbVb@gVe[g]g^g_gWbXb`g{gWeXe|g}g~gahbhYbZbchYedhehfhgh0b1bhhihZe0ejhkhlhmhnh2b3boh1ephqhrhsh4b5bthuh2e3evhwhxhyhzh6b7bAh4eBhChDhEh8b9bFhGhHh5eIhJhKhLhMh6eNhOhPhQhRhSh7eThUhvd4dVhWhXh$dwd%dg h i j a b c d 'd(dMdYhZh0h8e)d1h2h*d9e3h+d!e,dNd-de k l m n o 4h5h6h7hp 8hr 9h7d!h#e$e#h$h%h(h!b#b)h%e*hkk$b%b+h'e(e,h-h.h/h'b(b:h)e;hlk)b*b{d*e+e=h,eZ 0 -e.e?h1 2 @h/e:e[h]h^h_h+b,b`h;e{hmk-b.b|d}d~ds t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 |h=e?e}h~haibi/b:bci@edink;b=bei[e]efigihiii?b@bji^ekiok[b]b_e.daebe`ecew x de{e|ey z li}e~eminioipi^b_bqiafripk`b{bbfcf7 8 9 ! df# $ % ' eeefffgf( ) hfsi* + iffegejfkflfmf, - nfheofti. / : ; = ? @ [ ] ^ _ uipfqfviwixiyi|b}bzirfAiqk~bacsftfufvfwf` { iexf| } BiyfzfCiDiEiFibcccGiAfHirkdcec/djekeleA B C D meBfCfDf~ abEfbbcbIiFfGfJiKiLiMifcgcNiHfOiskhcicPiIfJfQiRiSiTijckcUiKfVilcmcWiLfMfXiYiZi0incoc1iNf2itkpcqcdb3iOfPf4i5i6i7ircsc8iQf9iuktcucneRfSf!iTfebfbUfVf#igbhb$iWfXf%i'i(i)ivcwc*iYf+ivkxcycoepeqeE F G H gdzcAchdidjdkdI J ldBcmdudK L ,iZf0f-i.i/i:iCcDc;i1f=iwkEcFc?i2f3f@i[i]i^iGcHc_i4f`ixkIcJc5f:drese6fteM N ue7f8fO P {i9f!f|i}i~iajKcLcbj#fcjykMcNc$f%fibjbkblb'fmbnbobpbve(f)f*fqbrb+fdjsbtbwe;d=dxeyezeAeQ R Be?dCe,fS T ubvbwbxbybzbAbBbCbej-f.ffjgjhjijOcPcjj/fkjzkQcRc:f;f=f?f@fDbEbDe[fFbGblj]f^fmjnjojpjScTcqj_frjAkUcVc@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsj~fagtjujvjwjWcXcxjbgyjBkYcZczjcgdgAjBjCjDj0c1cEjegFj2c3cGjfgggHjIjJjKj4c5cLjhgMjCk6c7cLbNjigjgOjPjQjRj8c9cSjkgTjDk!c#cUjlgmgVjWjXjYj$c%cZjng0jEk'c(c1jogpg2j3j4j5j)c*c6jqg7jFk+c,c8jrgsg9j!j#j$j-c.c%jtg'jGk/c:c(jugvg)j*j+j,j;c=c-jwg.jIk?c@c/jxgyg:j;j=j?j[c]c@jzg[jKk^c_c]jAgBg^j_j`j{j`c{c|jCg}jLk|c}c~jDgEgakbkckdk~cadekFgfkMkbdcd

138 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 2RmSmTmUmVmq [dGg5dHgIgJgKeKgLgWm0mNkXmY OkPkQkRk6dSkTkUkVkWkXkYkZkgkhkikjk0k1k2k3k4k5k6kTlUlVlYmZmMgNgLeMeOgPgQgRgSgMbNbTgNeUgVgWgXgObPbYgZgOePe0g1g2g3g4gQbRb5gQe6g7g8g9gSbTb!g#g$gRe%g'g(g)g*gSe+g,g-g.gTeUe/g:g;g=g?gUbVb@gVe[g]g^g_gWbXb`g{gWeXe|g}g~gahbhYbZbchYedhehfhgh0b1bhhihZe0ejhkhlhmhnh2b3boh1ephqhrhsh4b5bthuh2e3evhwhxhyhzh6b7bAh4eBhChDhEh8b9bFhGhHh5eIhJhKhLhMh6eNhOhPhQhRhSh7eThUhvd4dVhWhXh$dwd%dg h i j a b c d 'd(dMdYhZh0h8e)d1h2h*d9e3h+d!e,dNd-de k l m n o 4h5h6h7hp 8hr 9h7d!h#e$e#h$h%h(h!b#b)h%e*hkk$b%b+h'e(e,h-h.h/h'b(b:h)e;hlk)b*b{d*e+e=h,eZ 0 -e.e?h1 2 @h/e:e[h]h^h_h+b,b`h;e{hmk-b.b|d}d~ds t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 |h=e?e}h~haibi/b:bci@edink;b=bei[e]efigihiii?b@bji^ekiok[b]b_e.daebe`ecew x de{e|ey z li}e~eminioipi^b_bqiafripk`b{bbfcf7 8 9 ! df# $ % ' eeefffgf( ) hfsi* + iffegejfkflfmf, - nfheofti. / : ; = ? @ [ ] ^ _ uipfqfviwixiyi|b}bzirfAiqk~bacsftfufvfwf` { iexf| } BiyfzfCiDiEiFibcccGiAfHirkdcec/djekeleA B C D meBfCfDf~ abEfbbcbIiFfGfJiKiLiMifcgcNiHfOiskhcicPiIfJfQiRiSiTijckcUiKfVilcmcWiLfMfXiYiZi0incoc1iNf2itkpcqcdb3iOfPf4i5i6i7ircsc8iQf9iuktcucneRfSf!iTfebfbUfVf#igbhb$iWfXf%i'i(i)ivcwc*iYf+ivkxcycoepeqeE F G H gdzcAchdidjdkdI J ldBcmdudK L ,iZf0f-i.i/i:iCcDc;i1f=iwkEcFc?i2f3f@i[i]i^iGcHc_i4f`ixkIcJc5f:drese6fteM N ue7f8fO P {i9f!f|i}i~iajKcLcbj#fcjykMcNc$f%fibjbkblb'fmbnbobpbve(f)f*fqbrb+fdjsbtbwe;d=dxeyezeAeQ R Be?dCe,fS T ubvbwbxbybzbAbBbCbej-f.ffjgjhjijOcPcjj/fkjzkQcRc:f;f=f?f@fDbEbDe[fFbGblj]f^fmjnjojpjScTcqj_frjAkUcVc@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsj~fagtjujvjwjWcXcxjbgyjBkYcZczjcgdgAjBjCjDj0c1cEjegFj2c3cGjfgggHjIjJjKj4c5cLjhgMjCk6c7cLbNjigjgOjPjQjRj8c9cSjkgTjDk!c#cUjlgmgVjWjXjYj$c%cZjng0jEk'c(c1jogpg2j3j4j5j)c*c6jqg7jFk+c,c8jrgsg9j!j#j$j-c.c%jtg'jGk/c:c(jugvg)j*j+j,j;c=c-jwg.jIk?c@c/jxgyg:j;j=j?j[c]c@jzg[jKk^c_c]jAgBg^j_j`j{j`c{c|jCg}jLk|c}c~jDgEgakbkckdk~cadekFgfkMkbdcd

139 return n 2RmSmTmUmVmq [dGg5dHgIgJgKeKgLgWm0mNkXmY OkPkQkRk6dSkTkUkVkWkXkYkZkgkhkikjk0k1k2k3k4k5k6kTlUlVlYmZmMgNgLeMeOgPgQgRgSgMbNbTgNeUgVgWgXgObPbYgZgOePe0g1g2g3g4gQbRb5gQe6g7g8g9gSbTb!g#g$gRe%g'g(g)g*gSe+g,g-g.gTeUe/g:g;g=g?gUbVb@gVe[g]g^g_gWbXb`g{gWeXe|g}g~gahbhYbZbchYedhehfhgh0b1bhhihZe0ejhkhlhmhnh2b3boh1ephqhrhsh4b5bthuh2e3evhwhxhyhzh6b7bAh4eBhChDhEh8b9bFhGhHh5eIhJhKhLhMh6eNhOhPhQhRhSh7eThUhvd4dVhWhXh$dwd%dg h i j a b c d 'd(dMdYhZh0h8e)d1h2h*d9e3h+d!e,dNd-de k l m n o 4h5h6h7hp 8hr 9h7d!h#e$e#h$h%h(h!b#b)h%e*hkk$b%b+h'e(e,h-h.h/h'b(b:h)e;hlk)b*b{d*e+e=h,eZ 0 -e.e?h1 2 @h/e:e[h]h^h_h+b,b`h;e{hmk-b.b|d}d~ds t u v ndddedodpdqdrd3 4 sdfdtdyd5 6 |h=e?e}h~haibi/b:bci@edink;b=bei[e]efigihiii?b@bji^ekiok[b]b_e.daebe`ecew x de{e|ey z li}e~eminioipi^b_bqiafripk`b{bbfcf7 8 9 ! df# $ % ' eeefffgf( ) hfsi* + iffegejfkflfmf, - nfheofti. / : ; = ? @ [ ] ^ _ uipfqfviwixiyi|b}bzirfAiqk~bacsftfufvfwf` { iexf| } BiyfzfCiDiEiFibcccGiAfHirkdcec/djekeleA B C D meBfCfDf~ abEfbbcbIiFfGfJiKiLiMifcgcNiHfOiskhcicPiIfJfQiRiSiTijckcUiKfVilcmcWiLfMfXiYiZi0incoc1iNf2itkpcqcdb3iOfPf4i5i6i7ircsc8iQf9iuktcucneRfSf!iTfebfbUfVf#igbhb$iWfXf%i'i(i)ivcwc*iYf+ivkxcycoepeqeE F G H gdzcAchdidjdkdI J ldBcmdudK L ,iZf0f-i.i/i:iCcDc;i1f=iwkEcFc?i2f3f@i[i]i^iGcHc_i4f`ixkIcJc5f:drese6fteM N ue7f8fO P {i9f!f|i}i~iajKcLcbj#fcjykMcNc$f%fibjbkblb'fmbnbobpbve(f)f*fqbrb+fdjsbtbwe;d=dxeyezeAeQ R Be?dCe,fS T ubvbwbxbybzbAbBbCbej-f.ffjgjhjijOcPcjj/fkjzkQcRc:f;f=f?f@fDbEbDe[fFbGblj]f^fmjnjojpjScTcqj_frjAkUcVc@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsj~fagtjujvjwjWcXcxjbgyjBkYcZczjcgdgAjBjCjDj0c1cEjegFj2c3cGjfgggHjIjJjKj4c5cLjhgMjCk6c7cLbNjigjgOjPjQjRj8c9cSjkgTjDk!c#cUjlgmgVjWjXjYj$c%cZjng0jEk'c(c1jogpg2j3j4j5j)c*c6jqg7jFk+c,c8jrgsg9j!j#j$j-c.c%jtg'jGk/c:c(jugvg)j*j+j,j;c=c-jwg.jIk?c@c/jxgyg:j;j=j?j[c]c@jzg[jKk^c_c]jAgBg^j_j`j{j`c{c|jCg}jLk|c}c~jDgEgakbkckdk~cadekFgfkMkbdcd

140  

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

142 memory_type: GraphMemoryType = GraphMemoryType.DEVICE, 

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

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

145  

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

147 """ 

148 return self._entry.allocate(size, device=device, memory_type=memory_type, peer_access=peer_access) 2RmSmTmUmVm[dGg5dHgIgJgKeKgLgWmOkPkQkRkgkhkikjk0k1k2k3k4k5k6kTlUlVlMgNgMeOgPgQgTgNeUgVgWgXgYgZgPe0g1g2g5gQe6g7g8g9g!g#g$gRe%g'g(g)g*gSe+g,g-g.gUe/g:g;g@gVe[g]g^g_g`g{gXe|g}g~gchYedhehfhghhhih0ejhkhlhoh1ephqhrhshthuh3evhwhxhAh4eBhChDhEhFhGhHh5eIhJhKhLhMh6eNhOhQhRhSh7eThUhWhXh%dZh1h!h$e%h%e*h+h(e.h)e;h{d*e+e=h,eZ 0 -e.e?h1 2 @h:e^h;e{hndedqdfdtd|h?eai@ediei]ehi^eki_e.daebe`ecew x de{e|ey z li~eoiafrieeefffgf( ) hfsi* + ifgelfheofuiqfxirfAivfiexfBizfEiAfHi/djekeleA B C D meBfCfDf~ abEfbbcbIiGfLiHfOiPiJfSiKfViWiMfZiNf2i3iPf6iQf9ineRfSf!iTfebfbUfVf#igbhb$iXf(iYf+igdAcjdBcmd,i0f/i1f=i?i3f]i4f`i5f:drese6fteM N ue7f8fO P {i!f~i#fcjve(f)f*fqbrb+fdjsbtbwe=dze?dCeej.fhj/fkj?fDe[flj^foj_frj@dEeFeGeU V W X He`f{f|fHbIb}fJbKbsjagvjbgyjzjdgCjegFjGjggJjhgMjNjjgQjkgTjUjmgXjng0j1jpg4jqg7j8jsg#jtg'j(jvg+jwg.j/jyg=jzg[j]jBg`jCg}j~jEgckFgfk

149  

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

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

152  

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

154 """ 

155 return self._entry.deallocate(dptr) 2Vh

156  

157 def memset( 

158 self, 

159 dst: int, 

160 value, 

161 size_t width, 

162 size_t height=1, 

163 size_t pitch=0 

164 ) -> MemsetNode: 

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

166  

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

168 """ 

169 return self._entry.memset(dst, value, width, height, pitch) 1pr

170  

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

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

173  

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

175 """ 

176 return self._entry.launch(config, kernel, *args) 26dVkWkXkYkZkYmZmLeOeTeWeZe2e$da b c d Md*d9e3h+d!e,dNdk l m n o p 7d#e)h'e:h{d-e/e`h|d}d~ds t u v ddsd=eci[eji.dde}eqieefenfpfzisftfufvfwf` { iexf| } yfGi/dmeFfNiIfUiLf1iOf8ineUfWf*ioepeqeE F G H zcldZf;i2f_i:due9fbjve;dBe-fjj:f;f=f?f@fDbEbDe[fFbGb]fqj@dHe~fxjcgEjfgLjigSjlgZjog6jrg%jug-jxg@jAg|jDgek

177  

178 def empty(self) -> EmptyNode: 

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

180  

181 Returns 

182 ------- 

183 EmptyNode 

184 A new EmptyNode with no dependencies. 

185 """ 

186 return self._entry.join() 2Y Ph4d4h5h6h7h8h9h

187  

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

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

190  

191 Parameters 

192 ---------- 

193 *nodes : GraphNode 

194 Nodes to merge. 

195  

196 Returns 

197 ------- 

198 EmptyNode 

199 A new EmptyNode that depends on all input nodes. 

200 """ 

201 return self._entry.join(*nodes) 2KegkhkikjkTlUlVlMeNePeQeReSeUeVeXeYe0e1e3e4e5e6e7ek l m n o $e%e(e)e.e:e;eedfd?e@e]e^e_e.daebe`ecew x de{e|ey z ~eafhfgeheqfrfiezfAf/djekeleA B C D EfGfHfJfKfMfNfPfQfVfXfYfAcBc0f1f3f4f5f:drese6fteM N ue7f8fO P !f#f+f=d?d.f/fDe^f_f@dEeFeGeU V W X }fagbgdgeggghgjgkgmgngpgqgsgtgvgwgygzgBgCgEgFg

202  

203 def memcpy(self, dst: int, src: int, size_t size) -> MemcpyNode: 

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

205  

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

207 """ 

208 return self._entry.memcpy(dst, src, size) 

209  

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

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

212  

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

214 """ 

215 return self._entry.embed(child) 26dLeOeTeWeZe2eMdNd#e'e{d/e|d}d~ds t u v dd=e[e.d}eeefepfsfyf/dmeFfIfLfOfneWfoepeqeE F G H zcZf2f:d9fve;d-f:f]f@dHe~fcgfgiglgogrgugxgAgDg

216  

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

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

219  

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

221 """ 

222 return self._entry.record(event) 2SkYh0h8e)d#h,h*e[h|dod}hfiaemibfcf7 8 9 ! efjfvitfCijeBfJiQiXi4iRf%ioehd-i@ire|i$f%fibjbkblb(fxefj;fmjEe`ftjAjHjOjVj2j9j)j:j^jak

223  

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

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

226  

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

228 """ 

229 return self._entry.wait(event) 22h$h-h+e]h}dpd~hgibenibfdf# $ % ' ffkfwiufDikeCfKiRiYi5iSf'ipeid.i[ise}i$f'fmbnbobpb)fyegj=fnjFe{fujBjIjPjWj3j!j*j;j_jbk

230  

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

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

233  

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

235 """ 

236 return self._entry.callback(fn, user_data=user_data) 2NkXmTkUkRgSg3g4g=g?gahbhmhnhyhzh'd(d-d(h/h,e_h~drdbiiicepicfdfgfmf: ; = ? yiwfFileDfMiTi0i7iTf)iqekd:i^iteaj%f'f*fAeubvbwbxbij@fpjGe|fwjDjKjRjYj5j$j,j?j{jdk

237  

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

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

240  

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

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

243 via ``cudaGraphSetConditional``. 

244  

245 Parameters 

246 ---------- 

247 default_value : int, optional 

248 The default value to assign to the condition. 

249 If None, no default is assigned. 

250  

251 Returns 

252 ------- 

253 GraphCondition 

254 A condition variable for controlling conditional execution. 

255 """ 

256 cdef cydriver.CUgraphConditionalHandle c_handle 

257 cdef unsigned int flags = 0 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

258 cdef unsigned int default_val = 0 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

259  

260 if default_value is not None: 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

261 default_val = <unsigned int>default_value 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvdwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

262 flags = cydriver.CU_GRAPH_COND_ASSIGN_DEFAULT 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvdwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

263  

264 cdef cydriver.CUcontext ctx = NULL 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

265 with nogil: 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

266 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

267 HANDLE_RETURN(cydriver.cuGraphConditionalHandleCreate( 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

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

269  

270 return GraphCondition._from_handle(c_handle) 2q MbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5b6b7b8b9bvd3dwdg h i j a b c d e 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_c1d`c{c|c}c2d~cadbdcd

271  

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

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

274  

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

276 """ 

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

278  

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

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

281  

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

283 """ 

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

285  

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

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

288  

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

290 """ 

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

292  

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

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

295  

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

297 """ 

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

299  

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

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

302  

303 Parameters 

304 ---------- 

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

306 Customizable dataclass for graph instantiation options. 

307  

308 Returns 

309 ------- 

310 Graph 

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

312 """ 

313 from cuda.core.graph._graph_builder import _instantiate_graph 2NkOkPkQkRk6dSkTkUkVkWkXkYkZkgkhkikjk0k1k2k3k1m2m3m4k5k6k$d%d'd(d)d*d+d,d-dk l m n o p 7d

314  

315 return _instantiate_graph( 2NkOkPkQkRk6dSkTkUkVkWkXkYkZkgkhkikjk0k1k2k3k1m2m3m4k5k6k$d%d'd(d)d*d+d,d-dk l m n o p 7d

316 driver.CUgraph(as_intptr(self._h_graph)), options) 2NkOkPkQkRk6dSkTkUkVkWkXkYkZkgkhkikjk0k1k2k3k1m2m3m4k5k6k$d%d'd(d)d*d+d,d-dk l m n o p 7d

317  

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

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

320  

321 Parameters 

322 ---------- 

323 path : str 

324 File path for the DOT output. 

325 options : GraphDebugPrintOptions, optional 

326 Customizable options for the debug print. 

327 """ 

328 from cuda.core.graph._graph_builder import GraphDebugPrintOptions 2[dGg5d

329  

330 cdef unsigned int flags = 0 2[dGg5d

331 if options is not None: 2[dGg5d

332 if not isinstance(options, GraphDebugPrintOptions): 2Gg5d

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

334 flags = options._to_flags() 25d

335  

336 cdef bytes path_bytes = path.encode('utf-8') 2[d5d

337 cdef const char* c_path = path_bytes 2[d5d

338 with nogil: 2[d5d

339 HANDLE_RETURN(cydriver.cuGraphDebugDotPrint(as_cu(self._h_graph), c_path, flags)) 2[d5d

340  

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

342 """Return all nodes in the graph. 

343  

344 Returns 

345 ------- 

346 set of GraphNode 

347 All nodes in the graph. 

348 """ 

349 cdef vector[cydriver.CUgraphNode] nodes_vec 

350 nodes_vec.resize(128) 2q Y Ie7k8k8d9k!k#k$k9d!d%k'k(k)k*k+kJe#d,k-k.kzl/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllml4dg h i j a b c d MdNde k l m n o p r

351 cdef size_t num_nodes = 128 2q Y Ie7k8k8d9k!k#k$k9d!d%k'k(k)k*k+kJe#d,k-k.kzl/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllml4dg h i j a b c d MdNde k l m n o p r

352  

353 with nogil: 2q Y Ie7k8k8d9k!k#k$k9d!d%k'k(k)k*k+kJe#d,k-k.kzl/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllml4dg h i j a b c d MdNde k l m n o p r

354 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 2q Y Ie7k8k8d9k!k#k$k9d!d%k'k(k)k*k+kJe#d,k-k.kzl/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllml4dg h i j a b c d MdNde k l m n o p r

355  

356 if num_nodes == 0: 2q Y Ie7k8k8d9k!k#k$k9d!d%k'k(k)k*k+kJe#d,k-k.kzl/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllml4dg h i j a b c d MdNde k l m n o p r

357 return set() 2zlg h i j e

358  

359 if num_nodes > 128: 2q Y Ie7k8k8d9k!k#k$k9d!d%k'k(k)k*k+kJe#d,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllml4da b c d MdNde k l m n o p r

360 nodes_vec.resize(num_nodes) 

361 with nogil: 

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

363  

364 return {GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes)} 2q Y Ie7k8k8d9k!k#k$k9d!d%k'k(k)k*k+kJe#d,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllml4da b c d MdNde k l m n o p r

365  

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

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

368  

369 Returns 

370 ------- 

371 set of tuple 

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

373 a dependency edge in the graph. 

374 """ 

375 cdef vector[cydriver.CUgraphNode] from_nodes 

376 cdef vector[cydriver.CUgraphNode] to_nodes 

377 from_nodes.resize(128) 2]d^dnlol_d`dplY k l m n o p r

378 to_nodes.resize(128) 2]d^dnlol_d`dplY k l m n o p r

379 cdef size_t num_edges = 128 2]d^dnlol_d`dplY k l m n o p r

380  

381 with nogil: 2]d^dnlol_d`dplY k l m n o p r

382 IF CUDA_CORE_BUILD_MAJOR >= 13: 

383 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2]d^dnlol_d`dplY k l m n o p r

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

385 ELSE: 

386 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

388  

389 if num_edges == 0: 2]d^dnlol_d`dplY k l m n o p r

390 return set() 2nlolplr

391  

392 if num_edges > 128: 2]d^d_d`dY k l m n o p r

393 from_nodes.resize(num_edges) 

394 to_nodes.resize(num_edges) 

395 with nogil: 

396 IF CUDA_CORE_BUILD_MAJOR >= 13: 

397 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

399 ELSE: 

400 HANDLE_RETURN(cydriver.cuGraphGetEdges( 

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

402  

403 return { 2]d^d_d`dY k l m n o p r

404 (GraphNode._create(self._h_graph, from_nodes[i]), 2]d^d_d`dY k l m n o p r

405 GraphNode._create(self._h_graph, to_nodes[i])) 2]d^d_d`dY k l m n o p r

406 for i in range(num_edges) 2]d^d_d`dY k l m n o p r

407 } 

408  

409 @property 

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

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

412 return as_py(self._h_graph) 28m8e9e!e7d'h