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
« 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
5"""GraphDefinition: explicit CUDA graph definition."""
7from __future__ import annotations
9from libc.stddef cimport size_t
10from libc.stdint cimport uintptr_t
12from libcpp.vector cimport vector
14from cuda.bindings cimport cydriver
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
27from typing import TYPE_CHECKING
29from cuda.core._utils.cuda_utils import driver
31from cuda.core.typing import GraphMemoryType
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 )
61__all__ = ['GraphCondition', 'GraphDefinition']
64cdef class GraphCondition:
65 """A condition variable for conditional graph nodes.
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``.
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 """
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
86 def __repr__(self) -> str:
87 return f"<GraphCondition handle=0x{<unsigned long long>self._c_handle:x}>" 2#d
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
94 def __hash__(self) -> int:
95 return hash(<unsigned long long>self._c_handle) 21d2dwdmdndxdydzdAd$ % BdodCdHd' ( 3d4d5dMd6d7d8d9d!d$d%dJdKd
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
103cdef class GraphDefinition:
104 """A graph definition.
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.
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 """
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
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
131 def __repr__(self) -> str:
132 return f"<GraphDefinition handle=0x{as_intptr(self._h_graph):x}>" 2~l
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 )
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
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
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).
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
161 def deallocate(self, dptr: int) -> FreeNode:
162 """Add an entry-point memory free node (no dependencies).
164 See :meth:`GraphNode.deallocate` for full documentation.
165 """
166 return self._entry.deallocate(dptr) 2~h
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).
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 )
186 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
187 """Add an entry-point kernel launch node (no dependencies).
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
193 def empty(self) -> EmptyNode:
194 """Add an entry-point empty node (no dependencies).
196 Returns
197 -------
198 EmptyNode
199 A new EmptyNode with no dependencies.
200 """
201 return self._entry.join() 27 ^h+doipiqirisiti.d/d
203 def join(self, *nodes: GraphNode) -> EmptyNode:
204 """Create an empty node that depends on all given nodes.
206 Parameters
207 ----------
208 *nodes : GraphNode
209 Nodes to merge.
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
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).
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
225 def embed(self, child: GraphDefinition) -> ChildGraphNode:
226 """Add an entry-point child graph node (no dependencies).
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
232 def record(self, event: Event) -> EventRecordNode:
233 """Add an entry-point event record node (no dependencies).
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
239 def wait(self, event: Event) -> EventWaitNode:
240 """Add an entry-point event wait node (no dependencies).
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
246 def callback(self, fn, *, user_data=None) -> HostCallbackNode:
247 """Add an entry-point host callback node (no dependencies).
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
253 def create_condition(self, default_value: int | None = None) -> GraphCondition:
254 """Create a condition variable for use with conditional nodes.
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``.
260 Parameters
261 ----------
262 default_value : int, optional
263 The default value to assign to the condition.
264 If None, no default is assigned.
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
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
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))
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
287 def if_then(self, condition: GraphCondition) -> IfNode:
288 """Add an entry-point if-conditional node (no dependencies).
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
294 def if_else(self, condition: GraphCondition) -> IfElseNode:
295 """Add an entry-point if-else conditional node (no dependencies).
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
301 def while_loop(self, condition: GraphCondition) -> WhileNode:
302 """Add an entry-point while-loop conditional node (no dependencies).
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
308 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode:
309 """Add an entry-point switch conditional node (no dependencies).
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
315 def instantiate(self, options: GraphCompleteOptions | None = None) -> Graph:
316 """Instantiate the graph definition into an executable Graph.
318 Parameters
319 ----------
320 options : :obj:`~graph.GraphCompleteOptions`, optional
321 Customizable dataclass for graph instantiation options.
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
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
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.
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
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
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
356 def nodes(self) -> set[GraphNode]:
357 """Return all nodes in the graph.
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
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
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
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))
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
381 def edges(self) -> set[tuple[GraphNode, GraphNode]]:
382 """Return all edges in the graph as (from_node, to_node) pairs.
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
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))
404 if num_edges == 0: 2xeye8l9lzeAe!l7 t u v w x o z y
405 return set() 28l9l!lz
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))
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 }
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