Coverage for cuda/core/graph/_graph_definition.pyx: 95.42%
131 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-03 02:41 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
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~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m LnMn2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
83 self._c_handle = c_handle 2~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m LnMn2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
84 return self 2~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKno HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m LnMn2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
86 def __repr__(self) -> str:
87 return f"<GraphCondition handle=0x{<unsigned long long>self._c_handle:x}>" 2a b c d Vo
89 def __eq__(self, other: object) -> bool:
90 if not isinstance(other, GraphCondition): 2`n{n|n}nneoe=fpeNn~naobocodoeofogohoiojokolomonooopoqoroOnsotouovowo]n^n
91 return NotImplemented 2Nn~naobocodoeofogohoiojokolomonooopoqoroOnsotouovo
92 return self._c_handle == (<GraphCondition>other)._c_handle 2`n{n|n}nneoe=fpeNnwo]n^n
94 def __hash__(self) -> int:
95 return hash(<unsigned long long>self._c_handle) 2WoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(oxo)o*o+o,o-o.o/o]n^n
97 @property
98 def handle(self) -> driver.CUgraphConditionalHandle:
99 """The raw CUgraphConditionalHandle as an int."""
100 return <unsigned long long>self._c_handle 2~dknYdlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNn
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 2PeQe^h_h`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd
120 with nogil: 2PeQe^h_h`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd
121 HANDLE_RETURN(cydriver.cuGraphCreate(&graph, 0)) 2PeQe^h_h`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd
122 self._h_graph = create_graph_handle(graph) 2PeQe^h_h`h{h|ho _dbeWd}h~haiPn?fbicidilminReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2eQnRn3e4e5e6e7ereseteue8e9e!e#eSn`m{m|m$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMiTn~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdUnVnWnXnaeYnZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzg2dAg4j5j6jZn7j5b6b8jBg9jmm7b8bCg!jDg3dEg#j$j%j0n'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLg4dMg-j.j/j1n:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOg5dPg@j[j]j2n^j.b/b_jQg`jpm:b;b{jRg6dSg|j}j~j3nak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYg7dZgekfkgk4nhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g8d9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g9d$gtkukvk5nwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g!d.gAkBkCk6nDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g#d[gHkIkJk7nKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g$d|gVkWkXk8nYkqcrcZk}g0kwmsctc} 1k~g%dah2k3k4k9n5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khh'dih#k$k%k!n'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkh(dlh+k,k-k#n.kGcHc/kmh:kzmIcJc;knh)doh=k?k@k$n[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuh*dvh`k{k|k%n}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEh+dFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHh,dIhklllml'nnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQh-dRhrlsltl(nul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXh.dYhylzlAl)nBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h/d4hMlNlOl*nPl$c%cQl5hRlGm'c(cGbSl6h:d7hTlUlVl+nWl)c*cXl8hYlHm+c,cZl9h;d!h0l1l2l,n3l-c.c4l#h5lIm/c:c6l$h=d%h7l8l9l-n!l;c=c#l'h$lJm?c@c%l(h?d)h'l(l)l.n*l[c]c+l*h,lKm^c_c-l+h@d,h.l/l:l/n;l`c{c=l-h?lLm|c}c@l.h[d/h[l]l^l:n_l~cad`l:h{lMmbdcd|l;h]d=h}l~lam;nbmddedcm?hdmNmfdgdem@h^d[hfmgmhm=nimhdidjm]hkmOmjdkd
124 @staticmethod
125 cdef GraphDefinition _from_handle(GraphHandle h_graph):
126 """Create a GraphDefinition from an existing GraphHandle (internal use)."""
127 cdef GraphDefinition g = GraphDefinition.__new__(GraphDefinition) 2~dYd.f/f:f?no Td;fHbIbJbKbmeLbMbNbOb}m~manbncndnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l LfUdLd`dMde f g h a b c d NdVdOdm PdQd{d1 CeXdldmd5b6b7b8b9b!b#b$b2 3 4 5 %b'b(b)bD E F G *b+b,b-b.b/b:b;b=b?b@b[bH I J K ]b^b_b`b6 7 8 9 ! # $ % ' ( ) * {b|b}b~b+ , - . / : ; = ? acbcccdc@ [ ] ^ ecfcgchcL M N O _ ` { | icjckclcmcncocpcqcrcsctc} ucvcwcxc~ abbbcbyczcAcBcP Q R S CcDcEcFcGcHcIcJcKcLcMcNcT U V W OcPcQcRcdbebfbgbhbibjbkblbmbnbobScTcUcVcpbqbrbsbtbubvbwbxbWcXcYcZcybzbAbBb0c1c2c3cX Y Z 0 CbDbEbFb4c5c6c7c8c9c!c#c$c%c'c(cGb)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd
128 g._h_graph = h_graph 2~dYd.f/f:f?no Td;fHbIbJbKbmeLbMbNbOb}m~manbncndnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l LfUdLd`dMde f g h a b c d NdVdOdm PdQd{d1 CeXdldmd5b6b7b8b9b!b#b$b2 3 4 5 %b'b(b)bD E F G *b+b,b-b.b/b:b;b=b?b@b[bH I J K ]b^b_b`b6 7 8 9 ! # $ % ' ( ) * {b|b}b~b+ , - . / : ; = ? acbcccdc@ [ ] ^ ecfcgchcL M N O _ ` { | icjckclcmcncocpcqcrcsctc} ucvcwcxc~ abbbcbyczcAcBcP Q R S CcDcEcFcGcHcIcJcKcLcMcNcT U V W OcPcQcRcdbebfbgbhbibjbkblbmbnbobScTcUcVcpbqbrbsbtbubvbwbxbWcXcYcZcybzbAbBb0c1c2c3cX Y Z 0 CbDbEbFb4c5c6c7c8c9c!c#c$c%c'c(cGb)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd
129 return g 2~dYd.f/f:f?no Td;fHbIbJbKbmeLbMbNbOb}m~manbncndnPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4bw x y z i j k l LfUdLd`dMde f g h a b c d NdVdOdm PdQd{d1 CeXdldmd5b6b7b8b9b!b#b$b2 3 4 5 %b'b(b)bD E F G *b+b,b-b.b/b:b;b=b?b@b[bH I J K ]b^b_b`b6 7 8 9 ! # $ % ' ( ) * {b|b}b~b+ , - . / : ; = ? acbcccdc@ [ ] ^ ecfcgchcL M N O _ ` { | icjckclcmcncocpcqcrcsctc} ucvcwcxc~ abbbcbyczcAcBcP Q R S CcDcEcFcGcHcIcJcKcLcMcNcT U V W OcPcQcRcdbebfbgbhbibjbkblbmbnbobScTcUcVcpbqbrbsbtbubvbwbxbWcXcYcZcybzbAbBb0c1c2c3cX Y Z 0 CbDbEbFb4c5c6c7c8c9c!c#c$c%c'c(cGb)c*c+c,c-c.c/c:c;c=c?c@c[c]c^c_c`c{c|c}c~cadbdcdddedfdgdhdidjdkd
131 def __repr__(self) -> str:
132 return f"<GraphDefinition handle=0x{as_intptr(self._h_graph):x}>" 2LfLdQfa b c d NdOdPd{dkeyeMeNele:o
134 def __eq__(self, other: object) -> bool:
135 if not isinstance(other, GraphDefinition): 2meneoepe}m~manbncndn`d1 jnyozoAoBoCoDoOnEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUo_n@n[n
136 return NotImplemented 2jnyozoAoBoCoDoOnEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUo
137 return ( 2meneoepe}m~manbncndn`d1 jn_n@n[n
138 <uintptr_t>self._h_graph.get()
139 == <uintptr_t>(<GraphDefinition>other)._h_graph.get() 2meneoepe}m~manbncndn`d1 jn_n@n[n
140 )
142 def __hash__(self) -> int:
143 return hash(<uintptr_t>self._h_graph.get()) 2`d;o=o?o@o[o]o^oxo_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnp@n[n
145 @property
146 def is_valid(self) -> bool:
147 """Whether this graph definition remains valid."""
148 return as_intptr(self._h_graph) != 0 2{dCg
150 @property
151 def _entry(self) -> GraphNode:
152 """Return the internal entry-point GraphNode (no dependencies)."""
153 GD_check_valid(self) 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd
154 cdef GraphNode n = GraphNode.__new__(GraphNode) 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd
155 n._h_node = create_graph_node_handle(<cydriver.CUgraphNode>NULL, self._h_graph) 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd
156 n._is_entry = True 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd
157 return n 2PeYdQe^h_h`h{h|ho _dbeWd}h~hai?fbicidilmReSeTeUeVeeifigihiiiTdjiB WeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e$e%e'e@f[f]fJdKdC kilimini^f_foipiqirisiHbIbti`fuiviwixiJbKbyizi{f|fAiBiCiDiEiLbMbFi}fGiHiIiJiNbObKiLiMi~fNiOiPiQiRiagSiTiUiVibgcgWiXiYiZi0iPbQb1idg2i3i4i5iRbSb6i7iegfg8i9i!i#i$iTbUb%igg'i(i)i*iVbWb+i,ihgig-i.i/i:i;iXbYb=ijg?i@i[i]iZb0b^i_ikglg`i{i|i}i~i1b2bajmgbjcjdjej3b4bfjgjhjngijjjkjljmjognjojpjqjrjsjpgtjujtdZdvjwjxj(eud)eyj*ew x y z i j k l qg+e,e-eUdLd.e`dMdQfe f g h a b c d zjAjBjrg/eCjDj:e;esgEj=etg?eFjGjHj@e[eugIj]e^evewevgwgxeNdVd_eOd`em PdQdJjp q r s t KjLjMjNjn Oj{dv Pju Qjkeye1 {eze|e}e~eafbfcfdfefAeBeCeRjSjTjUjVjWjXjYjZj0jxgygXd0d1dcedeeefegeheieje|d}dffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMe1jBfCf2jRfDfEfNeleOeFfGfSf3jzgAg4j5j6j7j5b6b8jBg9jmm7b8bCg!jDgEg#j$j%j'j9b!b(jFg)jnm#b$bTfGgHg*jIg2 3 JgKg+j4 5 ,jLgMg-j.j/j:j%b'b;jNg=jom(b)bUfVfWfD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b?jOgPg@j[j]j^j.b/b_jQg`jpm:b;b{jRgSg|j}j~jak=b?bbkTgckqm@b[bUgHfXfYfVgZfH I 0fWgXgJ K dkYgZgekfkgkhk]b^bik0gjkrm_b`b1g2g6 7 8 9 3g! # $ % 1f4g5g6g' ( 7gkk) * lk8g9gmknkokpk{b|bqk!grksm}b~b+ , - . / : ; = ? sk#g$gtkukvkwkacbcxk%gyktmccdc'g(g)g*g+g@ [ 2f,g] ^ zk-g.gAkBkCkDkecfcEk/gFkumgchcIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk@g[gHkIkJkKkicjcLk]gMkvmkclcNk^g_gOkPkQkRkmcncSk`gTkocpcUk{g|gVkWkXkYkqcrcZk}g0kwmsctc} 1k~gah2k3k4k5kucvc6kbh7kxmwcxc7fchdh8keh~ abfhgh9kbbcb!khhih#k$k%k'kyczc(kjh)kymAcBc8f9f!fP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc*kkhlh+k,k-k.kGcHc/kmh:kzmIcJc;knhoh=k?k@k[kKcLc]kph^kAmMcNcqhJf#f$frh%fT U 'fshthV W _kuhvh`k{k|k}kOcPc~kwhalBmQcRcxhyhdbebfbgbzhhbibjbkb(fAhBhChlbmbDhblnbobclEhFhdlelflglScTchlGhilCmUcVcpbqbrbsbtbubvbwbxbjlHhIhklllmlnlWcXcolJhplDmYcZcKhLhMhNhOhybzb)fPhAbBbqlQhRhrlsltlul0c1cvlShwlEm2c3cKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlXhYhylzlAlBl4c5cClZhDlFm6c7cEl0h1hFlGlHlIl8c9cJl2hKl!c#cLl3h4hMlNlOlPl$c%cQl5hRlGm'c(cGbSl6h7hTlUlVlWl)c*cXl8hYlHm+c,cZl9h!h0l1l2l3l-c.c4l#h5lIm/c:c6l$h%h7l8l9l!l;c=c#l'h$lJm?c@c%l(h)h'l(l)l*l[c]c+l*h,lKm^c_c-l+h,h.l/l:l;l`c{c=l-h?lLm|c}c@l.h/h[l]l^l_l~cad`l:h{lMmbdcd|l;h=h}l~lambmddedcm?hdmNmfdgdem@h[hfmgmhmimhdidjm]hkmOmjdkd
159 def allocate(self, size_t size, *, device: Device | int | None = None,
160 memory_type: GraphMemoryType = GraphMemoryType.DEVICE,
161 peer_access: list[Device | int] | None = None) -> AllocNode:
162 """Add an entry-point memory allocation node (no dependencies).
164 See :meth:`GraphNode.allocate` for full documentation.
165 """
166 return self._entry.allocate(size, device=device, memory_type=memory_type, peer_access=peer_access) 2^h_h`h{h|h_dbeWd}h~hai?fbicidiWeXeYeZereseteue8e9e!e#e$e%e'e@f[f]fmini_foipiqiti`fuiviwixiyizi|fAiBiCiFi}fGiHiIiJiKiLiMi~fNiOiPiQiRiagSiTiUiVicgWiXiYi1idg2i3i4i5i6i7ifg8i9i!i%igg'i(i)i*i+i,iig-i.i/i=ijg?i@i[i]i^i_ilg`i{i|iajmgbjcjdjejfjgjhjngijjjkjljmjognjojqjrjsjpgtjujwjxj)eAjCju 3jAg6jBg9j!jEg%jFg)jTfGgHg*jIg2 3 JgKg+j4 5 ,jMg/jNg=jvdodydpdBd?jPg]jQg`j{jSg~jTgckUgHfXfYfVgZfH I 0fWgXgJ K dkZggk0gjk1f4g5g6g' ( 7gkk) * lk9gok!grksk$gvk%gyk*g2f,gzk.gCk/gFkIf3f4f5fL M N O 6f:g;g=g_ ` ?g{ | Gk[gJk]gMkNk_gQk`gTkUk|gXk}g0k1kah4kbh7k7fchdh8keh~ abfhgh9kbbcb!kih%kjh)kCdrdFdsdId*klh-kmh:k;koh@kph^kqhJf#f$frh%fT U 'fshthV W _kvh|kwhal(fAhBhChlbmbDhblnbobclFhflGhiljlIhmlJhplNh)fPhqlRhtlShwlKf*f+f,fX Y Z 0 -fThUhVhCbDbWhEbFbxlYhAlZhDlEl1hHl2hKlLl4hOl5hRlSl7hVl8hYlZl!h2l#h5l6l%h9l'h$l%l)h)l*h,l-l,h:l-h?l@l/h^l:h{l|l=ham?hdmem[hhm]hkm
168 def deallocate(self, dptr: int) -> FreeNode:
169 """Add an entry-point memory free node (no dependencies).
171 See :meth:`GraphNode.deallocate` for full documentation.
172 """
173 return self._entry.deallocate(dptr) 2vj
175 def memset(
176 self,
177 dst: Buffer | int,
178 value,
179 size_t width,
180 size_t height=1,
181 size_t pitch=0,
182 *,
183 dst_owner=None,
184 ) -> MemsetNode:
185 """Add an entry-point memset node (no dependencies).
187 See :meth:`GraphNode.memset` for full documentation.
188 """
189 return self._entry.memset( 2vewevgwgxen v AeBexgyg|d}dDeFeGeJeKeRfSf
190 dst, value, width, height=height, pitch=pitch, dst_owner=dst_owner 2vewevgwgxen v AeBexgyg|d}dDeFeGeJeKeRfSf
191 )
193 def launch(self, config: LaunchConfig, kernel: Kernel, *args) -> KernelNode:
194 """Add an entry-point kernel launch node (no dependencies).
196 See :meth:`GraphNode.launch` for full documentation.
197 """
198 return self._entry.launch(config, kernel, *args) 2Ydqe3e4e5e6e7ekili^f{fbgeghgkg(ei j k l Ud;esgEj=etg?eVdp q r s t n ~eafbfVjWjXjeefegegflfmfnfHevfwfxf1jDfFfzg8jDg(jTfJgLg;jUfVfWfD E F G ndAdOg_jRgbkHf0fYgik1f8gqk#gxk'g(g)g*g+g@ [ 2f,g] ^ -gEkIf6f@gLk^gSk{gZk~g6k7ffhhh(k8f9f!fP Q R S qdHdkh/knh]kJf'fuh~k(fEhhlHholKhLhMhNhOhybzb)fPhAbBbQhvlKf-fXhCl0hJl3hQl6hXl9h4l$h#l(h+l+h=l.h`l;hcm@hjm
200 def empty(self) -> EmptyNode:
201 """Add an entry-point empty node (no dependencies).
203 Returns
204 -------
205 EmptyNode
206 A new EmptyNode with no dependencies.
207 """
208 return self._entry.join() 2PeQeB JdKdC pjZdKjLjMjNjOj{dPjQjHeLeleOeCg
210 def join(self, *nodes: GraphNode) -> EmptyNode:
211 """Create an empty node that depends on all given nodes.
213 Parameters
214 ----------
215 *nodes : GraphNode
216 Nodes to merge.
218 Returns
219 -------
220 EmptyNode
221 A new EmptyNode that depends on all input nodes.
222 """
223 return self._entry.join(*nodes) 2?freseteue@f[f]f_f`f|f}f~fagcgdgfgggigjglgmgngogpgp q r s t AgBgEgFgKgMgNgodpdPgQgSgTgUgHfXfYfVgZfH I 0fWgXgJ K Zg0g7g9g!g$g%g2f.g/gIf3f4f5fL M N O ?g[g]g_g`g|g}gahbhghihjhrdsdlhmhohphqhJf#f$frh%fT U 'fshthV W vhwhDhFhGhIhJh)fRhShKf*f+f,fX Y Z 0 WhYhZh1h2h4h5h7h8h!h#h%h'h)h*h,h-h/h:h=h?h[h]h
225 def memcpy(self, dst: Buffer | int, src: Buffer | int, size_t size, *, dst_owner=None, src_owner=None) -> MemcpyNode:
226 """Add an entry-point memcpy node (no dependencies).
228 See :meth:`GraphNode.memcpy` for full documentation.
229 """
230 return self._entry.memcpy(dst, src, size, dst_owner=dst_owner, src_owner=src_owner) 2yj.e:eFjGjHj@e[eugIj]e^ecfdfefYjZj0jheiejehfofpfqfyfzfAfBfCf2jRfSf
232 def embed(self, child: GraphDefinition) -> ChildGraphNode:
233 """Add an entry-point child graph node (no dependencies).
235 See :meth:`GraphNode.embed` for full documentation.
236 """
237 return self._entry.embed(child) 2Tdqe^f{fbgeghgkgUdLd`dMdQfNdVdOdPdQdke1 CeXdldmdzgDgTfLgUfVfWfD E F G ndOgRgHfYg1f8g#g'g-gIf6f@g^g{g~g7fhh8f9f!fP Q R S qdkhnhJfuh(fEhHhKhQhKf-fXh0h3h6h9h$h(h+h.h;h@h
239 def record(self, event: Event) -> EventRecordNode:
240 """Add an entry-point event record node (no dependencies).
242 See :meth:`GraphNode.record` for full documentation.
243 """
244 return self._entry.record(event) 20ezjBjrg/e4j#jGg-jUfwd@j|jXfek1g2g6 7 8 9 4gmktk(gAk3f:gHkOkVk2kch#k8fDd+k=k#f`kxhyhdbebfbgbAhdlklLhrl*fThylFlMlTl0l7l'l.l[l}lfm
246 def wait(self, event: Event) -> EventWaitNode:
247 """Add an entry-point event wait node (no dependencies).
249 See :meth:`GraphNode.wait` for full documentation.
250 """
251 return self._entry.wait(event) 2DjzeSj1dEeIe5j$jHg.jVfxd[j}jYffk1g3g! # $ % 5gnkuk)gBk4f;gIkPkWk3kdh$k9fEd,k?k$f{kxhzhhbibjbkbBhelllMhsl+fUhzlGlNlUl1l8l(l/l]l~lgm
253 def callback(self, fn, *, user_data=None) -> HostCallbackNode:
254 """Add an entry-point host callback node (no dependencies).
256 See :meth:`GraphNode.callback` for full documentation.
257 """
258 return self._entry.callback(fn, user_data=user_data) 2ReSeTeUeVeeifigihiiiTdji1e2erisiDiEiZi0i#i$i:i;i}i~i*eqg+e,e-eLdMdQfe f g h a b c d Nd_eOd`ePdQdJjkeye1 {eze|e}eCeRjTjUjXd0dcedeffldifEejfkfrfmdsfIetfufLeMeEfNeleOeGf7j'jIg:jWfzd^jakZfhk2g3g6gpk+ , - . wk+gDk5f=gKkRkYk5keh'k!fGd.k[k%f}kyhzhChglpbqbrbsbnlOhul,fVhBlIlPlWl3l!l*l;l_lbmim
260 def create_condition(self, default_value: int | None = None) -> GraphCondition:
261 """Create a condition variable for use with conditional nodes.
263 The returned :class:`GraphCondition` object is passed to conditional-node
264 builder methods. Its value is controlled at runtime by device code
265 via ``cudaGraphSetConditional``.
267 Parameters
268 ----------
269 default_value : int, optional
270 The default value to assign to the condition.
271 If None, no default is assigned.
273 Returns
274 -------
275 GraphCondition
276 A condition variable for controlling conditional execution.
277 """
278 GD_check_valid(self) 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
279 cdef cydriver.CUgraphConditionalHandle c_handle
280 cdef unsigned int flags = 0 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
281 cdef unsigned int default_val = 0 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
283 if default_value is not None: 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
284 default_val = <unsigned int>default_value 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
285 flags = cydriver.CU_GRAPH_COND_ASSIGN_DEFAULT 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
287 cdef cydriver.CUcontext ctx = NULL 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
288 with nogil: 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
289 HANDLE_RETURN(cydriver.cuCtxGetCurrent(&ctx)) 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
290 HANDLE_RETURN(cydriver.cuGraphConditionalHandleCreate( 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
291 &c_handle, as_cu(self._h_graph), ctx, default_val, flags))
293 return GraphCondition._from_handle(c_handle) 2o HbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4btdaeudw x y z i j k l e f g h a b c d m 2d5b6b7b8b3d9b!b#b$b2 3 4 5 4d%b'b(b)bD E F G vdndodwdxdydzd*b+bAdpdBdRd,b-b5d.b/b:b;b6d=b?b@b[bH I J K 7d]b^b_b`b6 7 8 9 ! # $ % ' ( ) * 8d{b|b}b~b+ , - . / : ; = ? 9dacbcccdc@ [ ] ^ !decfcgchcL M N O _ ` { | #dicjckclcmcncocpc$dqcrcsctc} %ducvcwcxc~ abbbcb'dyczcAcBcP Q R S CdqdrdDdEdFdGdCcDcHdsdIdSdEcFc(dGcHcIcJc)dKcLcMcNcT U V W *dOcPcQcRcdbebfbgbhbibjbkblbmbnbob+dScTcUcVcpbqbrbsbtbubvbwbxb,dWcXcYcZcybzbAbBb-d0c1c2c3cX Y Z 0 CbDbEbFb.d4c5c6c7c8c9c!c#c/d$c%c'c(cGb:d)c*c+c,c;d-c.c/c:c=d;c=c?c@c?d[c]c^c_c@d`c{c|c}c[d~cadbdcd]dddedfdgd^dhdidjdkd
295 def if_then(self, condition: GraphCondition) -> IfNode:
296 """Add an entry-point if-conditional node (no dependencies).
298 See :meth:`GraphNode.if_then` for full documentation.
299 """
300 return self._entry.if_then(condition) 2o IbMbQbUbYb2btdw i e a 6b!b3 'bE +b/b?bI ^b7 # ( |b, ; = ? bc[ fcM ` jcncrcvcabzcQ DcHcLcU PcebibmbTcqbvbwbxbXczb1cY Db5c9c%c*c.c=c]c{cadedid
302 def if_else(self, condition: GraphCondition) -> IfElseNode:
303 """Add an entry-point if-else conditional node (no dependencies).
305 See :meth:`GraphNode.if_else` for full documentation.
306 """
307 return self._entry.if_else(condition) 2HbLbPbTbXb1bx j f b 5b9b2 %bD *b.b=bH ]b6 ! ' {b+ / : ; ac@ ecL _ icmcqcuc~ ycP CcGcKcT OcdbhblbScpbtbubvbWcyb0cX Cb4c8c$c)c-c;c[c`c~cddhd
309 def while_loop(self, condition: GraphCondition) -> WhileNode:
310 """Add an entry-point while-loop conditional node (no dependencies).
312 See :meth:`GraphNode.while_loop` for full documentation.
313 """
314 return self._entry.while_loop(condition) 2KbObSbWb0b4bz l h d m 8b$b5 )bG -b;b[bK `b9 % * ~b. : ? dc^ hcO | lcpctc} xccbBcS FcJcNcW RcgbkbobVcsbubxbZcBb3c0 Fb7c#c(cGb,c:c@c_c}ccdgdkd
316 def switch(self, condition: GraphCondition, unsigned int count) -> SwitchNode:
317 """Add an entry-point switch conditional node (no dependencies).
319 See :meth:`GraphNode.switch` for full documentation.
320 """
321 return self._entry.switch(condition, count) 2JbNbRbVbZb3budy k g c 7b#b4 (bF ,b:b@bJ _b8 $ ) }b- / = cc] gcN { kcocsc} wcbbAcR EcIcMcV QcfbjbnbUcrbtbwbYcAb2cZ Eb6c!c'cGb+c/c?c^c|cbdfdjd
323 def instantiate(self, options: GraphCompleteOptions | None = None) -> Graph:
324 """Instantiate the graph definition into an executable Graph.
326 Parameters
327 ----------
328 options : :obj:`~graph.GraphCompleteOptions`, optional
329 Customizable dataclass for graph instantiation options.
331 Returns
332 -------
333 Graph
334 An executable graph that can be launched on a stream.
335 """
336 GD_check_valid(self) 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e`m{m|m$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^evewexe_e`ep q r s t n {du keye1 {eze|e}e~eafbfcfdfefAeBeffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMeBfCfDfEfNeleOeFfGf
337 from cuda.core.graph._graph_builder import _instantiate_graph 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e`m{m|m$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^evewexe_e`ep q r s t n u keye1 {eze|e}e~eafbfcfdfefAeBeffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMeBfCfDfEfNeleOeFfGf
339 return _instantiate_graph(self, options) 2PeQeReSeTeUeVeWeXeYeZeqe0e1e2e3e4e5e6e7ereseteue8e9e!e#e`m{m|m$e%e'e(e)e*e+e,e-e.e/e:e;e=e?e@e[e]e^evewexe_e`ep q r s t n u keye1 {eze|e}e~eafbfcfdfefAeBeffgfhfDeldifEejfkflfmfnfofpfqfFeGeHerfmdsfIetfufvfwfxfyfzfAfJeKeLeMeBfCfDfEfNeleOeFfGf
341 def debug_dot_print(self, path: str, options: GraphDebugPrintOptions | None = None) -> None:
342 """Write a GraphViz DOT representation of the graph to a file.
344 Parameters
345 ----------
346 path : str
347 File path for the DOT output.
348 options : GraphDebugPrintOptions, optional
349 Customizable options for the debug print.
350 """
351 GD_check_valid(self) 2_dbeWd
352 from cuda.core.graph._graph_builder import GraphDebugPrintOptions 2_dbeWd
354 cdef unsigned int flags = 0 2_dbeWd
355 if options is not None: 2_dbeWd
356 if not isinstance(options, GraphDebugPrintOptions): 2beWd
357 raise TypeError("options must be a GraphDebugPrintOptions instance") 2be
358 flags = options._to_flags() 2Wd
360 cdef bytes path_bytes = path.encode('utf-8') 2_dWd
361 cdef const char* c_path = path_bytes 2_dWd
362 with nogil: 2_dWd
363 HANDLE_RETURN(cydriver.cuGraphDebugDotPrint(as_cu(self._h_graph), c_path, flags)) 2_dWd
365 def nodes(self) -> set[GraphNode]:
366 """Return all nodes in the graph.
368 Returns
369 -------
370 set of GraphNode
371 All nodes in the graph.
372 """
373 GD_check_valid(self) 2~dYd.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n {dv u 1 Xd0d1dcedeeefegeheieje|d}dldmd
374 cdef vector[cydriver.CUgraphNode] nodes_vec
375 cdef size_t num_nodes = 0 2~dYd.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd
377 with nogil: 2~dYd.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd
378 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), NULL, &num_nodes)) 2~dYd.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd
380 if num_nodes == 0: 2~dYd.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3men4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdw x y z i j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 Xd0d1dcedeeefegeheieje|d}dldmd
381 return set() 2Ydenw x y z m Xdcedeeefegeheieje|d}d
383 nodes_vec.resize(num_nodes) 2~d.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd
384 with nogil: 2~d.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd
385 HANDLE_RETURN(cydriver.cuGraphGetNodes(as_cu(self._h_graph), nodes_vec.data(), &num_nodes)) 2~d.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd
387 return {GraphNode._create(self._h_graph, nodes_vec[i]) for i in range(num_nodes)} 2~d.f/f:fo TdB C ;fPmQmmeRmSmTmUmneoeVmWmXmYmZm0m=fpe1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_mZdi j k l LfUdLdMde f g h a b c d NdVdOdm PdQdp q r s t n v u 1 0d1dldmd
389 def edges(self) -> set[tuple[GraphNode, GraphNode]]:
390 """Return all edges in the graph as (from_node, to_node) pairs.
392 Returns
393 -------
394 set of tuple
395 Each element is a (from_node, to_node) pair representing
396 a dependency edge in the graph.
397 """
398 GD_check_valid(self) 2MfNffngnOfPfhnB JdKdC p q r s t n v u
399 cdef vector[cydriver.CUgraphNode] from_nodes
400 cdef vector[cydriver.CUgraphNode] to_nodes
401 cdef size_t num_edges = 0 2MfNffngnOfPfhnB JdKdC p q r s t n v u
403 with nogil: 2MfNffngnOfPfhnB JdKdC p q r s t n v u
404 IF CUDA_CORE_BUILD_MAJOR >= 13:
405 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2MfNffngnOfPfhnB JdKdC p q r s t n v u
406 as_cu(self._h_graph), NULL, NULL, NULL, &num_edges))
407 ELSE:
408 HANDLE_RETURN(cydriver.cuGraphGetEdges(
409 as_cu(self._h_graph), NULL, NULL, &num_edges))
411 if num_edges == 0: 2MfNffngnOfPfhnB JdKdC p q r s t n v u
412 return set() 2fngnhnJdKdv
414 from_nodes.resize(num_edges) 2MfNfOfPfB JdKdC p q r s t n v u
415 to_nodes.resize(num_edges) 2MfNfOfPfB JdKdC p q r s t n v u
416 with nogil: 2MfNfOfPfB JdKdC p q r s t n v u
417 IF CUDA_CORE_BUILD_MAJOR >= 13:
418 HANDLE_RETURN(cydriver.cuGraphGetEdges( 2MfNfOfPfB JdKdC p q r s t n v u
419 as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), NULL, &num_edges))
420 ELSE:
421 HANDLE_RETURN(cydriver.cuGraphGetEdges(
422 as_cu(self._h_graph), from_nodes.data(), to_nodes.data(), &num_edges))
424 return { 2MfNfOfPfB JdKdC p q r s t n v u
425 (GraphNode._create(self._h_graph, from_nodes[i]), 2MfNfOfPfB JdKdC p q r s t n v u
426 GraphNode._create(self._h_graph, to_nodes[i])) 2MfNfOfPfB JdKdC p q r s t n v u
427 for i in range(num_edges) 2MfNfOfPfB JdKdC p q r s t n v u
428 }
430 @property
431 def handle(self) -> driver.CUgraph:
432 """Return the underlying driver CUgraph handle."""
433 return as_py(self._h_graph) 2?ninqgMde f g h rgsgtgugQdjn