Coverage for cuda/core/_memory/_buffer.pyx: 76.11%

314 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-16 01:23 +0000

1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# 

3# SPDX-License-Identifier: Apache-2.0 

4  

5from __future__ import annotations 

6  

7cimport cython 

8from libc.stdint cimport uintptr_t 

9from libcpp.atomic cimport memory_order_acquire, memory_order_release 

10  

11from cuda.bindings cimport cydriver 

12from cuda.core._memory._device_memory_resource import DeviceMemoryResource 

13from cuda.core._memory._pinned_memory_resource import PinnedMemoryResource 

14from cuda.core._memory._ipc cimport IPCBufferDescriptor, IPCDataForBuffer 

15from cuda.core._memory cimport _ipc 

16from cuda.core._rt cimport ( 

17 DevicePtrHandle, 

18 StreamHandle, 

19 ContextHandle, 

20 deviceptr_create_with_owner, 

21 deviceptr_create_with_mr, 

22 register_mr_dealloc_callback, 

23 live_owned_mempool_count, 

24 live_va_reservation_count, 

25 as_intptr, 

26 as_cu, 

27 get_current_context, 

28 set_deallocation_stream, 

29) 

30from cuda.core.typing import DevicePointerType 

31  

32from cuda.core._memory._copy_attributes cimport _with_attributes_available 

33from cuda.core._memory._copy_attributes cimport _to_cu_memcpy_attributes # no-cython-lint 

34  

35from cuda.core._stream cimport Stream, Stream_accept, Stream_is_legacy_default_token, default_stream 

36from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value 

37  

38  

39# Process-wide counts of live *owned* driver resources, read by the test suite. 

40# Counting lives in the C++ RAII layer (owned CUmemoryPool and VA reservations), 

41# so borrowed pool references and MemoryResource subclasses that hold no pool or 

42# reservation are excluded. conftest.py reads these to gate the per-test collect. 

43def _live_owned_mempool_count() -> int: 

44 return live_owned_mempool_count() 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xyfvizfwiAfxi+x,x-x.xBfyiCfzi/x:xDfAiEfBiFfCiGfDi;x=xHfEiIfFi?x@x[x]x^x_x`x{xJfGiKfHiLfIiMfJiNfKiOfLiPfMiQfNiRfOiSfPiTfQiUfRi|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y~f9iag!ibg#icg$idg%ieg'i^y_y`y{yfg(i0i|i|y}ygg)i1i}ihg*iig+i2i~i~yazjg,i3iajbzczkg-ilg.idzezfzgzhzizjzkzlzmznzozpzqzrzszU@tzuzV@vzwzW@xzyzX@zzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzKAKBKCKDKEKFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%Q'Q(Q)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S-S.S/S:S;S=S?S@S[S]S^S_S`S{S|S}S~SaTbTcTdTeTfTgThTiTjTkTlTmTnToTpTqTrTsTtTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[U]U^U_U`U{U|U}U~UaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzVAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV0V1V2V3V4V5V6V7V8V9V!V#V$V%V'V(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{V|V}V~VaWbWcWdWeWfWgWhWiWjWkWlWmWnWoWpWqWrWsWtWuWvWwWxWyWzWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWWXWYWZW0W1W2W3W4W5W6W7W8W9W!W#W$W%W'W(W)W*W+W,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzXAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXXXYXZX0X1X2X3X4X5X6X7X8X9X!X#X$X%X'X(X)X*X+X,X-X.X/X:X;X=X?X@X[X]X^X_X`X{X|X}X~XaYbYcYdYeYfYgYhYiYjYkYlYmYnYoYpYqYrYsYtYuYvYwYxYyYzYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYZY0Y1Y2Y3Y4Y5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)Y*Y+Y,Y-Y.Y/Y:Y;Y=Y?Y@Y[Y]Y^Y_Y`Y{Y|Y}Y~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZVfOZPZQZRZSZTZUZVZWZWfnjXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0Xfojf0g0h0i0j0k0l0m0Yfpjn0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z00010203040506070Zfqj8090!0#0$0%0'0(0)0*0+0,0-0.0/0:0;0=0?0@0[0]0^0_0`0{0|0}0~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p10fq1r1s1t1u11fv12fw1x1y1z1A1B1C1D1E1F1G13frjH1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1:1;1=1?1@1[1]1^1_1`1{1|1}1~1a24fsjb2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V25ftjW2X2Y2Z202122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2a3b3c3d3e3f36fujg3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3037fvj132333435363738393!3#3$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k48fwjl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z40414243444549fxj64748494!4#4$4%4'4(4)4*4+4,4-4.4/4:4;4=4?4@4[4]4^4_4`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5!fyjs5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z505152535455565758595!5#5$5%5'5(5)5*5+5,5-5.5/5:5;5=5?5@5[5]5^5_5`5{5|5}5~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636465666768696!6#6$6%6'6(6)6*6+6,6-6.6/6:6;6=6?6@6[6]6^6_6`6{6|6}6~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z707172737475767778797!7#7$7%7'7(7)7*7+7,7-7.7/7:7;7=7?7@7[7]7^7_7`7{7|7}7~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8)8*8+8,8-8.8/8:8;8=8?8@8[8]8^8_8`8{8|8}8~8a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z!0!1!2!3!4!5!6!7!8!9!!!#!$!%!'!(!)!*!+!,!-!.!/!:!;!=!?!@![!]!^!_!`!{!|!}!~!a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$0$1$2$3$4$5$6$7$8$9$!$#$$$%$'$($)$*$+$,$-$.$/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%0%1%2%3%4%5%6%7%8%9%!%#%$%%%'%(%)%*%+%,%-%.%/%:%;%=%?%@%[%]%^%_%`%{%|%}%~%a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'A'B'C'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'$'%'''(')'*'+','-'.'/':';'='?'@'[']'^'_'`'{'|'}'~'a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z(0(1(2(3(4(5(6(7(8(9(!(#($(%('((()(*(+(,(-(.(/(:(;(=(?(@([(](^(_(`({(|(}(~(a)b)c)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)0)1)2)3)4)5)6)7)8)9)!)#)$)%)')()))*)+),)-).)/):);)=)?)@)[)])^)_)`){)|)})~)a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*0*1*2*3*4*5*6*7*8*9*!*#*$*%*'*(*)***+*,*-*.*/*:*;*=*?*@*[*]*^*_*`*{*|*}*~*a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+0+1+2+3+4+5+6+7+8+9+!+#+$+%+'+(+)+*+++,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9,!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-#-$-%-'-(-)-*-+-,---.-/-:-;-=-?-@-[-]-^-_-`-{-|-}-~-a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/7/8/9/!/#/$/%/'/(/)/*/+/,/-/.///:/;/=/?/@/[/]/^/_/`/{/|/}/~/a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:0:1:2:3:4:5:6:7:8:9:!:#:$:%:':(:):*:+:,:-:.:/:::;:=:?:@:[:]:^:_:`:{:|:}:~:a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;0;1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;{;|;};~;a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=3=4=5=6=7=8=9=!=#=$=%='=(=)=*=+=,=-=.=/=:=;===?=@=[=]=^=_=`={=|=}=~=a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?A?B?C?D?E?F?G?H?I?J?K?L?M?N?O?P?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?8?9?!?#?$?%?'?(?)?*?+?,?-?.?/?:?;?=???@?[?]?^?_?`?{?|?}?~?a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@

45  

46  

47def _live_va_reservation_count() -> int: 

48 return live_va_reservation_count() 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xyfvizfwiAfxi+x,x-x.xBfyiCfzi/x:xDfAiEfBiFfCiGfDi;x=xHfEiIfFi?x@x[x]x^x_x`x{xJfGiKfHiLfIiMfJiNfKiOfLiPfMiQfNiRfOiSfPiTfQiUfRi|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y~f9iag!ibg#icg$idg%ieg'i^y_y`y{yfg(i0i|i|y}ygg)i1i}ihg*iig+i2i~i~yazjg,i3iajbzczkg-ilg.idzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAz6gBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzKAKBKCKDKEKFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%Q'Q(Q)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S-S.S/S:S;S=S?S@S[S]S^S_S`S{S|S}S~SaTbTcTdTeTfTgThTiTjTkTlTmTnToTpTqTrTsTtTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[U]U^U_U`U{U|U}U~UaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzVAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV0V1V2V3V4V5V6V7V8V9V!V#V$V%V'V(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{V|V}V~VaWbWcWdWeWfWgWhWiWjWkWlWmWnWoWpWqWrWsWtWuWvWwWxWyWzWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWWXWYWZW0W1W2W3W4W5W6W7W8W9W!W#W$W%W'W(W)W*W+W,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzXAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXXXYXZX0X1X2X3X4X5X6X7X8X9X!X#X$X%X'X(X)X*X+X,X-X.X/X:X;X=X?X@X[X]X^X_X`X{X|X}X~XaYbYcYdYeYfYgYhYiYjYkYlYmYnYoYpYqYrYsYtYuYvYwYxYyYzYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYZY0Y1Y2Y3Y4Y5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)Y*Y+Y,Y-Y.Y/Y:Y;Y=Y?Y@Y[Y]Y^Y_Y`Y{Y|Y}Y~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZVfOZPZQZRZSZTZUZVZWZWfnjXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0Xfojf0g0h0i0j0k0l0m0Yfpjn0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z00010203040506070Zfqj8090!0#0$0%0'0(0)0*0+0,0-0.0/0:0;0=0?0@0[0]0^0_0`0{0|0}0~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p10fq1r1s1t1u11fv12fw1x1y1z1A1B1C1D1E1F1G13frjH1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1:1;1=1?1@1[1]1^1_1`1{1|1}1~1a24fsjb2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V25ftjW2X2Y2Z202122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2a3b3c3d3e3f36fujg3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3037fvj132333435363738393!3#3$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k48fwjl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z40414243444549fxj64748494!4#4$4%4'4(4)4*4+4,4-4.4/4:4;4=4?4@4[4]4^4_4`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5!fyjs5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z505152535455565758595!5#5$5%5'5(5)5*5+5,5-5.5/5:5;5=5?5@5[5]5^5_5`5{5|5}5~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636465666768696!6#6$6%6'6(6)6*6+6,6-6.6/6:6;6=6?6@6[6]6^6_6`6{6|6}6~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z707172737475767778797!7#7$7%7'7(7)7*7+7,7-7.7/7:7;7=7?7@7[7]7^7_7`7{7|7}7~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8)8*8+8,8-8.8/8:8;8=8?8@8[8]8^8_8`8{8|8}8~8a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z!0!1!2!3!4!5!6!7!8!9!!!#!$!%!'!(!)!*!+!,!-!.!/!:!;!=!?!@![!]!^!_!`!{!|!}!~!a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$0$1$2$3$4$5$6$7$8$9$!$#$$$%$'$($)$*$+$,$-$.$/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%0%1%2%3%4%5%6%7%8%9%!%#%$%%%'%(%)%*%+%,%-%.%/%:%;%=%?%@%[%]%^%_%`%{%|%}%~%a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'A'B'C'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'$'%'''(')'*'+','-'.'/':';'='?'@'[']'^'_'`'{'|'}'~'a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z(0(1(2(3(4(5(6(7(8(9(!(#($(%('((()(*(+(,(-(.(/(:(;(=(?(@([(](^(_(`({(|(}(~(a)b)c)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)0)1)2)3)4)5)6)7)8)9)!)#)$)%)')()))*)+),)-).)/):);)=)?)@)[)])^)_)`){)|)})~)a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*0*1*2*3*4*5*6*7*8*9*!*#*$*%*'*(*)***+*,*-*.*/*:*;*=*?*@*[*]*^*_*`*{*|*}*~*a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+0+1+2+3+4+5+6+7+8+9+!+#+$+%+'+(+)+*+++,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9,!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-#-$-%-'-(-)-*-+-,---.-/-:-;-=-?-@-[-]-^-_-`-{-|-}-~-a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/7/8/9/!/#/$/%/'/(/)/*/+/,/-/.///:/;/=/?/@/[/]/^/_/`/{/|/}/~/a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:0:1:2:3:4:5:6:7:8:9:!:#:$:%:':(:):*:+:,:-:.:/:::;:=:?:@:[:]:^:_:`:{:|:}:~:a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;0;1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;{;|;};~;a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=3=4=5=6=7=8=9=!=#=$=%='=(=)=*=+=,=-=.=/=:=;===?=@=[=]=^=_=`={=|=}=~=a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?A?B?C?D?E?F?G?H?I?J?K?L?M?N?O?P?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?8?9?!?#?$?%?'?(?)?*?+?,?-?.?/?:?;?=???@?[?]?^?_?`?{?|?}?~?a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@

49  

50import warnings 

51from collections.abc import Sequence 

52from typing import TYPE_CHECKING 

53  

54from cuda.core._memory._copy_enums import CopyOptions, _reject_unsupported_during_api_call 

55from cuda.core._utils.cuda_utils import CUDAWarning 

56from cuda.core._utils.pycompat import BufferProtocol 

57from cuda.core._dlpack import classify_dl_device, make_py_capsule 

58from cuda.core._device import Device 

59  

60if TYPE_CHECKING: 

61 from cuda.core._memory._virtual_memory_resource import VirtualMemoryResource 

62 from cuda.core.graph import GraphBuilder 

63  

64  

65# ============================================================================= 

66# MR deallocation callback (invoked from C++ shared_ptr deleter) 

67# ============================================================================= 

68  

69cdef void _mr_dealloc_callback( 

70 object mr, 

71 cydriver.CUdeviceptr ptr, 

72 size_t size, 

73 const StreamHandle& h_stream, 

74) noexcept: 

75 """Called by the C++ deleter to deallocate via MemoryResource.deallocate. 

76  

77 Runs from a destructor, so nothing can be raised here; failures are reported 

78 as :class:`~cuda.core.CUDAWarning` (see the error handling policy). 

79 """ 

80 cdef Stream stream 

81 try: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

82 if not h_stream: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

83 # No stream was recorded: host-only memory (Buffer._init records 

84 # none) or a Buffer released before one was set. The default-stream 

85 # token needs no CUDA context to construct. 

86 stream = default_stream() 26e7eufvfTdbfcfuhCh

87 else: 

88 stream = Stream._from_handle(Stream, h_stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf~ehcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@difpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

89 mr.deallocate(int(ptr), size, stream=stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

90 except Exception as exc: 2#fYe

91 warnings.warn( 2#fYe

92 f"mr.deallocate({int(ptr):#x}) failed during Buffer destruction; " 2#fYe

93 f"the allocation may have leaked: {exc}", 2#fYe

94 CUDAWarning, 2#fYe

95 stacklevel=2, 

96 ) 

97  

98register_mr_dealloc_callback(_mr_dealloc_callback) 

99  

100  

101cdef inline void _apply_deallocation_stream( 

102 const DevicePtrHandle& h_ptr, const StreamHandle& h_stream) except *: 

103 """Record h_stream as the deallocation stream for h_ptr. 

104  

105 Translates CUDA_ERROR_INVALID_CONTEXT (default-stream token with no current 

106 context) into a descriptive RuntimeError instead of a raw CUDAError. 

107 """ 

108 cdef cydriver.CUresult status = set_deallocation_stream(h_ptr, h_stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbe:d@d;dce[d=dUe)f*f?f@f#h

109 if status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbe:d@d;dce[d=dUe)f*f?f@f#h

110 raise RuntimeError( 2be

111 "Cannot record a default deallocation stream when no CUDA context is " 

112 "current. Call Device.set_current() first, or pass stream= with a " 

113 "non-default Stream." 

114 ) 

115 HANDLE_RETURN(status) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhf:d@d;dce[d=dUe)f*f?f@f#h

116  

117  

118__all__ = ['Buffer', 'MemoryResource'] 

119  

120  

121# Memory Attribute Query Helpers 

122# ------------------------------ 

123cdef inline int _query_memory_attrs( 

124 _MemAttrs& out, 

125 cydriver.CUdeviceptr ptr 

126) except -1 nogil: 

127 """Query memory attributes for a device pointer.""" 

128 cdef unsigned int memory_type = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

129 cdef int is_managed = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

130 cdef int device_id = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

131 cdef cydriver.CUpointer_attribute[3] attrs = [ 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

132 cydriver.CUpointer_attribute.CU_POINTER_ATTRIBUTE_MEMORY_TYPE, 

133 cydriver.CUpointer_attribute.CU_POINTER_ATTRIBUTE_IS_MANAGED, 

134 cydriver.CUpointer_attribute.CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL, 

135 ] 

136 cdef uintptr_t[3] vals = [ 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

137 <uintptr_t><void*>&memory_type, 

138 <uintptr_t><void*>&is_managed, 

139 <uintptr_t><void*>&device_id, 

140 ] 

141  

142 cdef cydriver.CUresult ret 

143 ret = cydriver.cuPointerGetAttributes(3, attrs, <void**>vals, ptr) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

144 if ret == cydriver.CUresult.CUDA_ERROR_NOT_INITIALIZED: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

145 with cython.gil: 

146 # Device class handles the cuInit call internally 

147 Device() 

148 ret = cydriver.cuPointerGetAttributes(3, attrs, <void**>vals, ptr) 

149 HANDLE_RETURN(ret) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

150  

151 # TODO: HMM/ATS-enabled sysmem should also report is_managed=True; the 

152 # CU_POINTER_ATTRIBUTE_IS_MANAGED query does not capture that yet. 

153 out.is_managed = is_managed != 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

154  

155 if memory_type == 0: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

156 # unregistered host pointer 

157 out.is_host_accessible = True 2NcfcgcWdXdYdZd0d1d2d3d4d5d6d

158 out.is_device_accessible = False 2NcfcgcWdXdYdZd0d1d2d3d4d5d6d

159 out.device_id = -1 2NcfcgcWdXdYdZd0d1d2d3d4d5d6d

160 elif ( 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t dded* + fcgc= 7cHdSdh i j , - .

161 is_managed 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t dded* + fcgc= 7cHdSdh i j , - .

162 or memory_type == cydriver.CUmemorytype.CU_MEMORYTYPE_HOST 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 ]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcs t * + fcgcHdSdh i j , - .

163 ): 

164 # Managed memory or pinned host memory 

165 out.is_host_accessible = True 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0ca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcdded* + fcgc= 7cSdh i j

166 out.is_device_accessible = True 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0ca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcdded* + fcgc= 7cSdh i j

167 out.device_id = device_id 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0ca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcdded* + fcgc= 7cSdh i j

168 elif memory_type == cydriver.CUmemorytype.CU_MEMORYTYPE_DEVICE: 2]b1cScs t Hd, - .

169 out.is_host_accessible = False 2]b1cScs t Hd, - .

170 out.is_device_accessible = True 2]b1cScs t Hd, - .

171 out.device_id = device_id 2]b1cScs t Hd, - .

172 else: 

173 with cython.gil: 

174 raise ValueError(f"Unsupported memory type: {memory_type}") 

175 return 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

176  

177  

178cdef inline void _init_memory_attrs(Buffer self): 

179 """Initialize memory attributes by querying the pointer.""" 

180 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

181 if not self._mem_attrs_inited.load(memory_order_acquire): 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

182 _query_memory_attrs(self._mem_attrs, as_cu(self._h_ptr)) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

183 self._mem_attrs_inited.store(True, memory_order_release) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d

184  

185  

186cdef bint _stream_is_capturing(Stream s): 

187 cdef cydriver.CUstreamCaptureStatus cap_status 

188 IF CUDA_CORE_BUILD_MAJOR >= 13: 

189 HANDLE_RETURN(cydriver.cuStreamGetCaptureInfo(as_cu(s._h_stream), &cap_status, 2k ac;bl m n bc!c=b9c?b^bccdc@b[b

190 NULL, NULL, NULL, NULL, NULL)) 

191 ELSE: 

192 HANDLE_RETURN(cydriver.cuStreamGetCaptureInfo(as_cu(s._h_stream), &cap_status, 

193 NULL, NULL, NULL, NULL)) 

194 return cap_status == cydriver.CU_STREAM_CAPTURE_STATUS_ACTIVE 2k ac;bl m n bc!c=b9c?b^bccdc@b[b

195  

196  

197cdef void _do_copy_with_attributes( 

198 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, size_t nbytes, 

199 object options, cydriver.CUstream hstream, 

200): 

201 IF CUDA_CORE_BUILD_MAJOR >= 13: 

202 cdef cydriver.CUmemcpyAttributes cu_attr = _to_cu_memcpy_attributes(options) 2k ac;bl m n bc=b?b^bccdc@b[b

203 with nogil: 2k ac;bl m n bc=b?b^bccdc@b[b

204 HANDLE_RETURN(cydriver.cuMemcpyWithAttributesAsync(dst, src, nbytes, &cu_attr, hstream)) 2k ac;bl m n bc=b?b^bccdc@b[b

205 ELSE: 

206 pass # unreachable: _with_attributes_available() is always False on CUDA 12 

207  

208  

209cdef void _dispatch_buffer_copy( 

210 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, size_t nbytes, 

211 Stream s, object options, str method_name, 

212): 

213 """Submit a single copy, honoring CopyOptions when the attributes path is usable.""" 

214 if options is None: 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqc2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j

215 with nogil: 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqck l m rcn TcLc#c; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j

216 HANDLE_RETURN(cydriver.cuMemcpyAsync(dst, src, nbytes, as_cu(s._h_stream))) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqck l m rcn TcLc#c; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j

217 return 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqck l m rcn TcLc#c; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j

218 if not isinstance(options, CopyOptions): 22c3c4ck ac;bl m rcn bc!c=b9c?b^bccdc@b[b

219 raise TypeError( 22c3c4c

220 f"{method_name}: options must be CopyOptions, got {type(options).__name__}" 22c3c4c

221 ) 

222 if Stream_is_legacy_default_token(s): 2k ac;bl m rcn bc!c=b9c?b^bccdc@b[b

223 raise TypeError( 2rc

224 f"{method_name} does not accept LEGACY_DEFAULT_STREAM with options " 2rc

225 "(matches copy_batch); cuMemcpyWithAttributesAsync rejects it outright, " 

226 "unlike PER_THREAD_DEFAULT_STREAM, which is a real stream to the driver " 

227 "and is accepted. Pass an explicit stream, PER_THREAD_DEFAULT_STREAM, " 

228 "or options=None." 

229 ) 

230 if _stream_is_capturing(s): 2k ac;bl m n bc!c=b9c?b^bccdc@b[b

231 raise TypeError( 2!c9c

232 f"{method_name} does not support graph capture with options " 2!c9c

233 "(matches copy_batch); the driver has no graph-node form of " 

234 "cuMemcpyWithAttributesAsync, so options cannot be honored in a graph. " 

235 "Use GraphNode.memcpy for a plain (non-attributed) copy node, or pass " 

236 "options=None." 

237 ) 

238 if _with_attributes_available(): 2k ac;bl m n bc=b?b^bccdc@b[b

239 _do_copy_with_attributes(dst, src, nbytes, options, as_cu(s._h_stream)) 2k ac;bl m n bc=b?b^bccdc@b[b

240 else: 

241 _reject_unsupported_during_api_call( 

242 options.src_access_order, 

243 "the CUDA 13 build of cuda.core and a driver that reports CUDA 13.2 or newer " 

244 "(cuMemcpyWithAttributesAsync is unavailable here)", 

245 ) 

246 # STREAM and ANY never require access sooner than stream order, so 

247 # cuMemcpyAsync satisfies them; options are otherwise silently 

248 # ignored on this pre-CUDA-13.2 fallback path, matching copy_batch. 

249 with nogil: 

250 HANDLE_RETURN(cydriver.cuMemcpyAsync(dst, src, nbytes, as_cu(s._h_stream))) 

251  

252  

253cdef class Buffer: 

254 """Represent a handle to allocated memory. 

255  

256 This generic object provides a unified representation for how 

257 different memory resources are to give access to their memory 

258 allocations. 

259  

260 Support for data interchange mechanisms are provided by DLPack. 

261  

262 Note 

263 ---- 

264 Pickling an IPC-enabled :class:`Buffer` embeds an 

265 :class:`~_memory.IPCBufferDescriptor`. Unpickling reconstructs the buffer 

266 by calling :meth:`from_ipc_descriptor` and therefore performs an IPC 

267 import. Do not unpickle buffers from untrusted sources. 

268 """ 

269 def __cinit__(self) -> None: 

270 self._clear() 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

271  

272 def _clear(self) -> None: 

273 self._h_ptr.reset() # Release the handle 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

274 self._size = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

275 self._memory_resource = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

276 self._ipc_data = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

277 self._owner = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

278 self._mem_attrs_inited.store(False) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

279  

280 def __init__(self, *args, **kwargs) -> None: 

281 raise RuntimeError("Buffer objects cannot be instantiated directly. " 2mj

282 "Please use MemoryResource APIs.") 

283  

284 @classmethod 

285 def _init( 

286 cls, ptr: DevicePointerType, size_t size, mr: MemoryResource | None = None, 

287 ipc_descriptor: IPCBufferDescriptor | None = None, 

288 owner : object | None = None, 

289 *, 

290 stream: Stream | GraphBuilder | None = None, 

291 ) -> Buffer: 

292 """Create a Buffer from a raw pointer. 

293  

294 When ``mr`` is provided, the buffer takes ownership: ``mr.deallocate()`` 

295 is called when the buffer is closed or garbage collected. When ``owner`` 

296 is provided, the owner is kept alive but no deallocation is performed. 

297 When ``mr`` is provided, a deallocation stream is recorded at creation 

298 (``stream`` if given, otherwise ``default_stream()``). Recording a 

299 default-stream token requires a CUDA context to be current. Host-only 

300 resources (``mr.is_device_accessible`` is ``False``) record no stream 

301 and need no context. 

302 """ 

303 if mr is not None and owner is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gDjEjmg= Fjdfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

304 raise ValueError("owner and memory resource cannot be both specified together") 2Fj

305 if stream is not None and mr is None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gDjEjmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

306 raise ValueError("stream requires a memory resource (mr)") 2DjEj

307 cdef Buffer self = Buffer.__new__(cls) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

308 cdef uintptr_t c_ptr = <uintptr_t>(int(ptr)) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

309 cdef Stream s 

310 cdef cydriver.CUresult _ds_status 

311 cdef bint record_stream 

312 if mr is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

313 s = Stream_accept(default_stream() if stream is None else stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

314 # Host-only memory needs no CUDA context to free, so no deallocation 

315 # stream is recorded and the driver is not called. 

316 record_stream = mr.is_device_accessible 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

317 self._h_ptr = deviceptr_create_with_mr(c_ptr, size, mr) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

318 if record_stream: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

319 _ds_status = set_deallocation_stream(self._h_ptr, s._h_stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf~ehcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@duhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

320 if _ds_status != cydriver.CUresult.CUDA_SUCCESS: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf~ehcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@duhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

321 # Reset before raising: the DevicePtrHandle destructor would otherwise 

322 # invoke _mr_dealloc_callback, which catches any inner exception and 

323 # clears the exception state, swallowing the error we're about to raise. 

324 self._h_ptr.reset() 2uhCh

325 if _ds_status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2uhCh

326 raise RuntimeError( 2uhCh

327 "Cannot record a default deallocation stream when no CUDA context is " 

328 "current. Call Device.set_current() first, or pass stream= with a " 

329 "non-default Stream." 

330 ) 

331 HANDLE_RETURN(_ds_status) 

332 else: 

333 self._h_ptr = deviceptr_create_with_owner(c_ptr, owner) 2~fagbgcgdgeg3efggghgig[fjgeckglg]b$cscMctckcucvcwcxcyczcAcBcCcs t Ncdded* + fcgcVewf2gth, - . WdXdYdYiZd0d1d2d3d4d5d6d

334 self._size = size 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

335 self._memory_resource = mr 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

336 self._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

337 self._owner = owner 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

338 self._mem_attrs_inited.store(False) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

339 return self 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d

340  

341 @staticmethod 

342 def _reduce_helper(mr, ipc_descriptor): 

343 cdef ContextHandle h_ctx = get_current_context() 

344 cdef int device_id 

345 if not h_ctx: 

346 # Spawned processes unpickle arguments before entering their target, 

347 # so initialize the context needed to bind the default-stream token. 

348 device_id = mr.device_id 

349 (Device(device_id) if device_id >= 0 else Device()).set_current() 

350 # The parent process's stream is not portable across processes, so the 

351 # pickle path cannot thread an explicit stream through. Seed the 

352 # imported buffer's deallocation with the current context's default 

353 # stream; the receiver can override it before or during close. 

354 return Buffer.from_ipc_descriptor(mr, ipc_descriptor, stream=default_stream()) 

355  

356 def __reduce__(self) -> tuple[object, ...]: 

357 # Unpickling performs a live CUDA IPC import from descriptor bytes in the 

358 # pickle stream. Only deserialize Buffers from a trusted principal. 

359 # Must not serialize the parent's stream! 

360 Buffer_check_open(self) 2ShThUhVhQcRcWhXhYhZh0h1h3b4b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b*b+b

361 return Buffer._reduce_helper, (self.memory_resource, self.ipc_descriptor) 2ShThUhVhQcRcWhXhYhZh0h1h3b4b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b*b+b

362  

363 @staticmethod 

364 def from_handle( 

365 ptr: DevicePointerType, size_t size, mr: MemoryResource | None = None, 

366 owner: object | None = None, 

367 *, 

368 stream: Stream | GraphBuilder | None = None, 

369 ) -> Buffer: 

370 """Create a new :class:`Buffer` object from a pointer. 

371  

372 Parameters 

373 ---------- 

374 ptr : :obj:`~_memory.DevicePointerType` 

375 Allocated buffer handle object 

376 size : int 

377 Memory size of the buffer 

378 mr : :obj:`~_memory.MemoryResource`, optional 

379 Memory resource associated with the buffer. When provided, 

380 :meth:`MemoryResource.deallocate` is called when the buffer is 

381 closed or garbage collected. 

382 owner : object, optional 

383 An object holding external allocation that the ``ptr`` points to. 

384 The reference is kept as long as the buffer is alive. 

385 The ``owner`` and ``mr`` cannot be specified together. 

386 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`, optional 

387 Keyword-only. The stream used to order the buffer's deallocation 

388 when ``mr`` owns the pointer. Defaults to ``default_stream()``. 

389 Recording a default-stream token requires a CUDA context to be 

390 current. Host-only resources (``mr.is_device_accessible`` is 

391 ``False``) record no stream and need no context. If the buffer may 

392 be freed from a different host thread, 

393 pass a stream other than the per-thread default stream, which 

394 refers to a different stream on each thread. 

395  

396 Note 

397 ---- 

398 When neither ``mr`` nor ``owner`` is specified, this creates a 

399 non-owning reference. The pointer will NOT be freed when the 

400 :class:`Buffer` is closed or garbage collected. 

401 """ 

402 return Buffer._init(ptr, size, mr=mr, owner=owner, stream=stream) 2@ [ ] ^ EcFcGcHcIcJcKc/ ~blc# $ : ( mco p q ) ncocpcqck ac;bl m n bc=bTcLc?bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+bZe0e1e6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhifVgWgDj= Fjdfngce#fYeef[d2g}eaf.dth, - . WdXdYdYiZd0d1d2d3d4d5d6d

403  

404 @classmethod 

405 def from_ipc_descriptor( 

406 cls, mr: DeviceMemoryResource | PinnedMemoryResource | VirtualMemoryResource, 

407 IPCBufferDescriptor ipc_descriptor not None: IPCBufferDescriptor, 

408 *, Stream stream not None: Stream 

409 ) -> Buffer: 

410 """Import a buffer that was exported from another process. 

411  

412 Parameters 

413 ---------- 

414 mr : :obj:`~_memory.DeviceMemoryResource` | :obj:`~_memory.PinnedMemoryResource` | :obj:`~_memory.VirtualMemoryResource` 

415 The IPC-enabled memory resource matching the exporting process. A 

416 descriptor exported from a :class:`VirtualMemoryBuffer` is imported 

417 with a :class:`VirtualMemoryResource` of this process whose 

418 ``handle_type`` matches the exporter's; the import maps the shared 

419 physical memory for that resource's device with that resource's 

420 access options. 

421 ipc_descriptor : :obj:`~_memory.IPCBufferDescriptor` 

422 The descriptor exported from another process. 

423 stream : :obj:`~_stream.Stream` 

424 Keyword-only. The stream used for asynchronous deallocation when 

425 the buffer is closed or garbage collected. 

426  

427 Note 

428 ---- 

429 The descriptor payload and ``size`` are supplied by the exporting peer 

430 and must be treated as untrusted input unless the peer is known to be 

431 cooperating. 

432 """ 

433 return _ipc.Buffer_from_ipc_descriptor(cls, mr, ipc_descriptor, stream) 2; Y@Z@0@og/geh:gwh;gXg3h8c=g1g3g

434  

435 @property 

436 @cython.critical_section 

437 def ipc_descriptor(self) -> IPCBufferDescriptor: 

438 """Descriptor for sharing this buffer with other processes. 

439  

440 A pool-backed buffer caches its descriptor; a 

441 :class:`VirtualMemoryBuffer` exports a new one on every access. 

442 """ 

443 Buffer_check_open(self) 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b8c(b)b{b|b*b+bVe1glf3g1f2f

444 cdef object ipc_data 

445 if self._ipc_data is None: 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b8c(b)b{b|b*b+b1glf3g1f2f

446 ipc_data = IPCDataForBuffer(_ipc.Buffer_get_ipc_descriptor(self), False) 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b8c(b)b{b|b*b+b1glf3g1f2f

447 if self._ipc_data is None: 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b{b|b*b+blf1f2f

448 self._ipc_data = ipc_data 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b{b|b*b+blf1f2f

449 return self._ipc_data.ipc_descriptor 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b{b|b*b+blf1f2f

450  

451 def close(self, stream: Stream | GraphBuilder | None = None) -> None: 

452 """Deallocate this buffer asynchronously on the given stream. 

453  

454 This buffer is released back to their memory resource 

455 asynchronously on the given stream. 

456  

457 Parameters 

458 ---------- 

459 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`, optional 

460 The stream object to use for asynchronous deallocation. If None, 

461 the deallocation stream stored in the handle is used. 

462  

463 See Also 

464 -------- 

465 set_deallocation_stream 

466 Change the deallocation stream without closing the buffer. 

467 """ 

468 Buffer_close(self, stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

469  

470 def set_deallocation_stream(self, stream: Stream | GraphBuilder) -> None: 

471 """Change the stream that orders this buffer's eventual deallocation. 

472  

473 The buffer remains open and usable. A later :meth:`close` without a 

474 stream, garbage collection, or release of the final retained device 

475 pointer handle uses the replacement stream. 

476  

477 This method does not synchronize streams or establish dependencies. 

478 The caller must ensure that allocation and all accesses are ordered 

479 before the deallocation on ``stream``. 

480  

481 Parameters 

482 ---------- 

483 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

484 The stream to use for eventual asynchronous deallocation. 

485  

486 Raises 

487 ------ 

488 RuntimeError 

489 If the buffer is already closed, or if a default-stream token 

490 cannot be bound because no CUDA context is current. 

491 TypeError 

492 If ``stream`` is ``None`` or is not an accepted stream object. 

493  

494 Notes 

495 ----- 

496 Synchronizing concurrent mutation and destruction of the same buffer 

497 is the caller's responsibility. 

498 """ 

499 Buffer_set_deallocation_stream(self, stream) 28dhfXe}e)f*f?f#h

500  

501 def __enter__(self): 

502 return self 22e[f6g; ogYg8cZgih0g?g@gScd e f g WeieWcXc

503  

504 def __exit__(self, exc_type, exc_val, exc_tb): 

505 self.close() 22e[f6g; ogYg8cZgih0g?g@gScd e f g WeieWcXc

506 return False 22e[f6g; ogYg8cZgih0g?g@gScd e f g WeieWcXc

507  

508 def copy_to(self, Buffer dst: Buffer | None = None, *, stream: Stream | GraphBuilder, 

509 options: CopyOptions | None = None) -> Buffer: 

510 """Copy from this buffer to the dst buffer asynchronously on the given stream. 

511  

512 Copies the data from this buffer to the provided dst buffer. 

513 If the dst buffer is not provided, then a new buffer is first 

514 allocated using the associated memory resource before the copy. 

515  

516 Parameters 

517 ---------- 

518 dst : :obj:`~_memory.Buffer`, optional 

519 Destination buffer to copy data to. If not provided, a new buffer 

520 is allocated using this buffer's memory resource. 

521 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

522 Keyword argument specifying the stream for the 

523 asynchronous copy 

524 options : :class:`~utils.CopyOptions`, optional 

525 Transfer hints (source access order, location hints, overlap mode). 

526 Honored on the CUDA 13 build of ``cuda.core`` with a driver of CUDA 

527 13.2 or newer. Not accepted with ``LEGACY_DEFAULT_STREAM``; use 

528 ``PER_THREAD_DEFAULT_STREAM`` instead. Not accepted with a 

529 capturing stream either, since a graph cannot represent these 

530 attributes; use :meth:`graph.GraphNode.memcpy` for a plain, 

531 non-attributed copy node, or pass ``options=None``. On an older 

532 cuda.bindings/driver, ``src_access_order`` values of ``STREAM`` 

533 and ``ANY`` are silently ignored; ``DURING_API_CALL`` raises 

534 instead of silently downgrading its guarantee. 

535  

536 Raises 

537 ------ 

538 TypeError 

539 If ``options`` is not a :class:`~utils.CopyOptions` instance, or 

540 if ``options`` is given together with ``LEGACY_DEFAULT_STREAM`` 

541 or a stream currently in graph capture mode. 

542 RuntimeError 

543 If ``options.src_access_order`` is ``DURING_API_CALL`` and 

544 cuda.bindings or the driver is older than CUDA 13.2: falling 

545 back to a plain copy cannot honor that guarantee. 

546  

547 """ 

548 Buffer_check_open(self) 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j

549 cdef Stream s = Stream_accept(stream) 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j

550 cdef size_t src_size = self._size 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j

551  

552 if dst is None: 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j

553 if self._memory_resource is None: 2k wf

554 raise ValueError("a destination buffer must be provided (this " 2wf

555 "buffer does not have a memory_resource)") 

556 dst = self._memory_resource.allocate(src_size, stream=s) 1k

557 else: 

558 Buffer_check_open(dst) 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVe:d;d=dh i j

559  

560 cdef size_t dst_size = dst._size 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%c:d;d=dh i j

561 if dst_size != src_size: 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%c:d;d=dh i j

562 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 27d

563 f"are: src={src_size}, dst={dst_size})" 27d

564 ) 

565 _dispatch_buffer_copy( 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g %c:d;d=dh i j

566 as_cu(dst._h_ptr), as_cu(self._h_ptr), src_size, s, options, "copy_to") 

567 return dst 2,bOcPc-b.b/b:b% r ' o p q k ;bl m rcn =bLc#c?b^b@b[ba b c d e f g %c:d;d=dh i j

568  

569 def copy_from(self, Buffer src not None: Buffer, *, stream: Stream | GraphBuilder, 

570 options: CopyOptions | None = None) -> None: 

571 """Copy from the src buffer to this buffer asynchronously on the given stream. 

572  

573 Parameters 

574 ---------- 

575 src : :obj:`~_memory.Buffer` 

576 Source buffer to copy data from 

577 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

578 Keyword argument specifying the stream for the 

579 asynchronous copy 

580 options : :class:`~utils.CopyOptions`, optional 

581 Transfer hints (source access order, location hints, overlap mode). 

582 Honored on the CUDA 13 build of ``cuda.core`` with a driver of CUDA 

583 13.2 or newer. Not accepted with ``LEGACY_DEFAULT_STREAM``; use 

584 ``PER_THREAD_DEFAULT_STREAM`` instead. Not accepted with a 

585 capturing stream either, since a graph cannot represent these 

586 attributes; use :meth:`graph.GraphNode.memcpy` for a plain, 

587 non-attributed copy node, or pass ``options=None``. On an older 

588 cuda.bindings/driver, ``src_access_order`` values of ``STREAM`` 

589 and ``ANY`` are silently ignored; ``DURING_API_CALL`` raises 

590 instead of silently downgrading its guarantee. 

591  

592 Raises 

593 ------ 

594 TypeError 

595 If ``options`` is not a :class:`~utils.CopyOptions` instance, or 

596 if ``options`` is given together with ``LEGACY_DEFAULT_STREAM`` 

597 or a stream currently in graph capture mode. 

598 RuntimeError 

599 If ``options.src_access_order`` is ``DURING_API_CALL`` and 

600 cuda.bindings or the driver is older than CUDA 13.2: falling 

601 back to a plain copy cannot honor that guarantee. 

602 """ 

603 Buffer_check_open(self) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dIdVe

604 Buffer_check_open(src) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dIdVe

605 cdef Stream s = Stream_accept(stream) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId

606 cdef size_t dst_size = self._size 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId

607 cdef size_t src_size = src._size 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId

608  

609 if src_size != dst_size: 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId

610 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 2?d

611 f"are: src={src_size}, dst={dst_size})" 2?d

612 ) 

613 _dispatch_buffer_copy( 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1eId

614 as_cu(self._h_ptr), as_cu(src._h_ptr), dst_size, s, options, "copy_from") 

615  

616 def fill(self, value: int | BufferProtocol, *, stream: Stream | GraphBuilder) -> None: 

617 """Fill this buffer with a repeating byte pattern. 

618  

619 Parameters 

620 ---------- 

621 value : int | :obj:`collections.abc.Buffer` 

622 - int: Must be in range [0, 256). Converted to 1 byte. 

623 - :obj:`collections.abc.Buffer`: Must be 1, 2, or 4 bytes. 

624 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

625 Stream for the asynchronous fill operation. 

626  

627 Raises 

628 ------ 

629 TypeError 

630 If value is not an int and does not support the buffer protocol. 

631 ValueError 

632 If value byte length is not 1, 2, or 4. 

633 If buffer size is not divisible by value byte length. 

634 OverflowError 

635 If int value is outside [0, 256). 

636  

637 """ 

638 Buffer_check_open(self) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eVe

639 cdef Stream s_stream = Stream_accept(stream) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|e

640 cdef unsigned int val 

641 cdef unsigned int elem_size 

642 val, elem_size = _parse_fill_value(value) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|e

643  

644 cdef size_t buffer_size = self._size 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d

645 cdef cydriver.CUdeviceptr dst = as_cu(self._h_ptr) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d

646 cdef cydriver.CUstream s = as_cu(s_stream._h_stream) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d

647  

648 if elem_size == 1: 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d

649 with nogil: 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n JdKdLdMdNdOdPdtdudvdwdxdydzdAdBdCdDdEdFdGd

650 HANDLE_RETURN(cydriver.cuMemsetD8Async(dst, val, buffer_size, s)) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n JdKdLdMdNdOdPdtdudvdwdxdydzdAdBdCdDdEdFdGd

651 elif elem_size == 2: 

652 if buffer_size & 0x1: 29dgdjdkdldpdqd#d%d'c*c+c,c:c;c(d*d@c^c_c`c~cad,d

653 raise ValueError(f"buffer size ({buffer_size}) must be divisible by 2") 29d#d%d(d*d,d

654 with nogil: 2gdjdkdldpdqd'c*c+c,c:c;c@c^c_c`c~cad

655 HANDLE_RETURN(cydriver.cuMemsetD16Async(dst, val, buffer_size // 2, s)) 2gdjdkdldpdqd'c*c+c,c:c;c@c^c_c`c~cad

656 elif elem_size == 4: 

657 if buffer_size & 0x3: 2!dhdidmdndodrdsd$d'd(c)c-c.c/c=c?c)d+d[c]c{c|c}cbdcd-d

658 raise ValueError(f"buffer size ({buffer_size}) must be divisible by 4") 2!d$d'd)d+d-d

659 with nogil: 2hdidmdndodrdsd(c)c-c.c/c=c?c[c]c{c|c}cbdcd

660 HANDLE_RETURN(cydriver.cuMemsetD32Async(dst, val, buffer_size // 4, s)) 2hdidmdndodrdsd(c)c-c.c/c=c?c[c]c{c|c}cbdcd

661  

662 def __dlpack__( 

663 self, 

664 *, 

665 stream: int | None = None, 

666 max_version: tuple[int, int] | None = None, 

667 dl_device: tuple[int, int] | None = None, 

668 copy: bool | None = None, 

669 ) -> object: 

670 # Note: we ignore the stream argument entirely (as if it is -1). 

671 # It is the user's responsibility to maintain stream order. 

672 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efdVe= 7ch i j 5c6c}b

673 if dl_device is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b

674 raise BufferError("Sorry, not supported: dl_device other than None") 2fd

675 if copy is True: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b

676 raise BufferError("Sorry, not supported: copy=True") 2fd

677 if max_version is None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b

678 versioned = False 27efd

679 else: 

680 if not isinstance(max_version, tuple) or len(max_version) != 2: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g fd= 7ch i j 5c6c}b

681 raise BufferError(f"Expected max_version tuple[int, int], got {max_version}") 2fd

682 versioned = max_version >= (1, 0) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g fd= 7ch i j 5c6c}b

683 return make_py_capsule(self, versioned) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b

684  

685 def __dlpack_device__(self) -> tuple[int, int]: 

686 Buffer_check_open(self) 2uf~evfhcDcVe= 7c5c6c}b

687 return classify_dl_device(self) 2uf~evfhcDc= 7c5c6c}b

688  

689 def __buffer__(self, flags: int, /) -> memoryview: 

690 # Support for Python-level buffer protocol as per PEP 688. 

691 # This raises a BufferError unless: 

692 # 1. Python is 3.12+ 

693 # 2. This Buffer object is host accessible 

694 raise NotImplementedError("WIP: Buffer.__buffer__ hasn't been implemented yet.") 

695  

696 def __release_buffer__(self, buffer: memoryview, /) -> None: 

697 # Supporting method paired with __buffer__. 

698 raise NotImplementedError("WIP: Buffer.__release_buffer__ hasn't been implemented yet.") 

699  

700 @property 

701 def device_id(self) -> int: 

702 """Return the device ordinal of this buffer, or -1 for memory not bound to a device.""" 

703 Buffer_check_open(self) 2SiTiUi4e5e1cSc~efds t Ncdded* + fcgcVe[g]gViWiXixf4g5gpgtfUd5c6c, - ieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d

704 if self._memory_resource is not None: 2SiTiUi4e5e1cSc~efds t Ncdded* + fcgc[g]gViWiXixf4g5gpgtfUd5c6c, - ieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d

705 return self._memory_resource.device_id 2SiTiUi4e5e~efd[g]gViWiXixf4g5gpgtfUd5c6cieQdRdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeWcXc}b

706 _init_memory_attrs(self) 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d

707 return self._mem_attrs.device_id 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d

708  

709 @property 

710 def handle(self) -> int: 

711 """Return the buffer handle object. 

712  

713 .. caution:: 

714  

715 This handle is a Python object. To get the memory address of the underlying C 

716 handle, call ``int(Buffer.handle)``. 

717 """ 

718 # Return raw integer for compatibility with ctypes and other tools 

719 # that expect a raw pointer value 

720 return as_intptr(self._h_ptr) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhIhJhKhLhMh$fNhOh%f~g'f4iPhQhRh0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKcSiTiUi-f.fqgrg/fsg:f;ftgugvgwgxgygzg,bAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2eRg6 7 8 / ~blc# $ % r ' : ( mco p q ) ncocpcqck ac;bl m n bc=bTcLc#c?b^bccdc@b[b^g~f_gag`gbg{gcg|gdgeg3efggghgigjgeckg}glgUc]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gfh:gghhh;gXg8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h6hSgTgZg7h0g1c(f@gSca b c Ze0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWeId%c8dhf7efds t * + td'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTd:d@dmg= 7c;dViWiXidfngef[d=dffxhjhkhlhmhpg8h?fafnhohphqhtfrh#hAhshh i j ZizjthUd5c6c, - /dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZdqf0d1d2d3d4d5dWcXc}b6d

721  

722 @property 

723 def is_closed(self) -> bool: 

724 """Whether this buffer has been closed.""" 

725 return self._h_ptr.get() == NULL 2^g_g`g{g|gDh[fEhFh}gXe@fZi

726  

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

728 if not isinstance(other, Buffer): 2.f/f:f;fzjthT@GjAjBj

729 return NotImplemented 2zjT@

730 cdef Buffer other_buf = <Buffer>other 2.f/f:f;fzjthGjAjBj

731 return (as_intptr(self._h_ptr) == as_intptr(other_buf._h_ptr) and 2.f/f:f;fzjthGjAjBj

732 self._size == other_buf._size) 2zjthAjBj

733  

734 def __hash__(self) -> int: 

735 return hash((as_intptr(self._h_ptr), self._size)) 2th1@2@3@4@AjBj

736  

737 def __repr__(self) -> str: 

738 maybe_is_mapped = " is_mapped=True" if self.is_mapped else "" 2-f=fZiHj

739 return f"<Buffer ptr={as_intptr(self._h_ptr):#x} size={self._size}{maybe_is_mapped}>" 2-f=fZiHj

740  

741 @property 

742 def is_device_accessible(self) -> bool: 

743 """Return True if this buffer can be accessed by the GPU, otherwise False.""" 

744 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcTdVe= 7c]fxflftfh i j Ud5c6c, - . WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d

745 if self._memory_resource is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcTd= 7c]fxflftfh i j Ud5c6c, - . WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d

746 return self._memory_resource.is_device_accessible 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfdTd= 7c]fxflftfh i j Ud5c6cjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeWcXc}b

747 _init_memory_attrs(self) 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d

748 return self._mem_attrs.is_device_accessible 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d

749  

750 @property 

751 def is_host_accessible(self) -> bool: 

752 """Return True if this buffer can be accessed by the CPU, otherwise False.""" 

753 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcJdgdhdKdidLdMdNdjdkdldmdndodOdPdpdqdrdsdtd'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTdVebfcf= 7c]fxflftfh i j Ud5c6c, - . }b

754 if self._memory_resource is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcJdgdhdKdidLdMdNdjdkdldmdndodOdPdpdqdrdsdtd'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTdbfcf= 7c]fxflftfh i j Ud5c6c, - . }b

755 return self._memory_resource.is_host_accessible 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfdJdgdhdKdidLdMdNdjdkdldmdndodOdPdpdqdrdsdtd'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTdbfcf= 7c]fxflftfh i j Ud5c6c}b

756 _init_memory_attrs(self) 2s t Ncdded* + fcgc, - .

757 return self._mem_attrs.is_host_accessible 2s t Ncdded* + fcgc, - .

758  

759 @property 

760 def is_managed(self) -> bool: 

761 """Return True if this buffer is CUDA managed (unified) memory, otherwise False.""" 

762 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcVe= 7cHdSdh i j

763 _init_memory_attrs(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDc= 7cHdSdh i j

764 if self._mem_attrs.is_managed: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDc= 7cHdSdh i j

765 return True 2YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0cDc= 7c

766 # Pool-allocated managed memory does not set CU_POINTER_ATTRIBUTE_IS_MANAGED, 

767 # so fall back to the memory resource when it advertises managed allocations. 

768 return self._memory_resource is not None and self._memory_resource.is_managed 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 ]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcHdSdh i j

769  

770 @property 

771 def is_mapped(self) -> bool: 

772 """Return True if this buffer is mapped into the process via IPC.""" 

773 return getattr(self._ipc_data, "is_mapped", False) 2-f=f_ ` kcehXg=gTdZiHj

774  

775  

776 @property 

777 def memory_resource(self) -> MemoryResource: 

778 """Return the memory resource associated with this buffer.""" 

779 return self._memory_resource 2~g@ [ ] ^ EcFcGcHcIcJcKc/ lc# $ : ( mc) ncocpcqcShThUhVh5ihiiijiki; QcRc$climinioiWhpiXhqiYhriZhsi0hti1hui6i7i8i3b4bsc_b`b5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdh/gvhfh2h:gghhh;gXgYg4h8c(b)bzcAc{b|bBcCc*b+b1cSc6eWeTd:d]f;d1gxf=dlf3gjhkhyhlh4g5gmhpg)f*f9hnhohphqhtfzh.drhBhsh1f2fUdWdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfPeQekfReSeTeZd0d1d2d3d4d5dWcXc}b6d

780  

781 @property 

782 def size(self) -> int: 

783 """Return the memory size of this buffer.""" 

784 return self._size 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ~g0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKcSiTiUi,bPc-b.b/b:b6 7 8 / ~blc# $ % r ' : ( djmco p q ) ncocpcqcejfjgjicjck ac;bl m n bc=bTcLc#c?b^bccdc@b[b^g~f_gag`gbg{gcg|gdgeg3efggghgigjgeckg}glg]bShThUhVhhiiijiki; QcRc$climinioiWhpiXhqiYhriZhsi0hti1hui3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh:gghwhhh;gXgYg=g(b)bzcAc{b|bBcCc*b+b4e5eZg0g1c(f?ga b c Ze0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 8dhf7efdTd[g]g:dmg= 7c]f;dViWiXixf=dlfffxhjhkhyhlh4g5gmhpg)f*fafnhohphqh!htfzhrh#hAhBhshh i j th1f2fUd5c6c/d]d^d_d`d{d|d}d~dieQdRdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfPeQekfReSeTeWcXc}b

785  

786 @property 

787 def owner(self) -> object: 

788 """Return the object holding external allocation.""" 

789 return self._owner 2Nc

790  

791  

792cdef class MemoryResource: 

793 """Abstract base class for memory resources that manage allocation and 

794 deallocation of buffers. 

795  

796 Subclasses must implement methods for allocating and deallocation, as well 

797 as properties associated with this memory resource from which all allocated 

798 buffers will inherit. (Since all :class:`Buffer` instances allocated and 

799 returned by the :meth:`allocate` method would hold a reference to self, the 

800 buffer properties are retrieved simply by looking up the underlying memory 

801 resource's respective property.) 

802 """ 

803  

804 def allocate(self, size_t size, *, stream: Stream | GraphBuilder) -> Buffer: 

805 """Allocate a buffer of the requested size. 

806  

807 Parameters 

808 ---------- 

809 size : int 

810 The size of the buffer to allocate, in bytes. 

811 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

812 Keyword-only. The stream on which to perform the allocation 

813 asynchronously. Must be passed explicitly; pass 

814 ``device.default_stream`` to use the default stream. For subclasses 

815 that support stream-ordered deallocation, this stream also orders 

816 the buffer's eventual deallocation, so if the buffer may be freed 

817 from a different host thread, prefer a stream other than the 

818 per-thread default stream, which refers to a different stream on 

819 each thread. 

820  

821 Returns 

822 ------- 

823 Buffer 

824 The allocated buffer object, which can be used for device or host operations 

825 depending on the resource's properties. 

826 """ 

827 raise TypeError("MemoryResource.allocate must be implemented by subclasses.") 2Cj

828  

829 def deallocate( 

830 self, 

831 ptr: DevicePointerType, 

832 size_t size, 

833 *, 

834 stream: Stream | GraphBuilder 

835 ) -> None: 

836 """Deallocate a buffer previously allocated by this resource. 

837  

838 Parameters 

839 ---------- 

840 ptr : :obj:`~_memory.DevicePointerType` 

841 The pointer or handle to the buffer to deallocate. 

842 size : int 

843 The size of the buffer to deallocate, in bytes. 

844 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder` 

845 Keyword-only. The stream on which to perform the deallocation 

846 asynchronously. Must be passed explicitly; pass 

847 ``device.default_stream`` to use the default stream. 

848 """ 

849 raise TypeError("MemoryResource.deallocate must be implemented by subclasses.") 2Cj

850  

851 @property 

852 def is_device_accessible(self) -> bool: 

853 """Whether buffers allocated by this resource are device-accessible.""" 

854 raise TypeError("MemoryResource.is_device_accessible must be implemented by subclasses.") 2Cj

855  

856 @property 

857 def is_host_accessible(self) -> bool: 

858 """Whether buffers allocated by this resource are host-accessible.""" 

859 raise TypeError("MemoryResource.is_host_accessible must be implemented by subclasses.") 2Cj

860  

861 @property 

862 def is_managed(self) -> bool: 

863 """Whether buffers allocated by this resource are CUDA managed (unified) memory.""" 

864 return False 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcHdSdh i j

865  

866 @property 

867 def device_id(self) -> int: 

868 """Device ID associated with this memory resource, or -1 if not applicable.""" 

869 raise TypeError("MemoryResource.device_id must be implemented by subclasses.") 2Cj

870  

871  

872# Buffer Implementation Helpers 

873# ----------------------------- 

874cdef Buffer Buffer_from_deviceptr_handle( 

875 DevicePtrHandle h_ptr, 

876 size_t size, 

877 MemoryResource mr, 

878 object ipc_descriptor = None, 

879 type cls = Buffer, 

880): 

881 """Create a Buffer (or subclass instance) from an existing DevicePtrHandle.""" 

882 cdef Buffer buf = cls.__new__(cls) 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

883 buf._h_ptr = h_ptr 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

884 buf._size = size 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

885 buf._memory_resource = mr 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

886 buf._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

887 buf._owner = None 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

888 buf._mem_attrs_inited.store(False) 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

889 return buf 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b

890  

891  

892cdef tuple Buffer_coerce_batch(object buffers, str what, str single_hint): 

893 """Coerce ``buffers`` to a ``tuple[Buffer, ...]``; reject a bare Buffer. 

894  

895 Shared by the batched free functions. Passing one Buffer is rejected 

896 rather than treated as a one-element batch so that the per-buffer API 

897 named by ``single_hint`` stays the single obvious way to do it. 

898 """ 

899 cdef list out 

900 if isinstance(buffers, Buffer): 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,fahbhch

901 raise TypeError( 2cjahbhch

902 f"{what}: pass a sequence of Buffers; for a single buffer use {single_hint}" 2cjahbhch

903 ) 

904 if not isinstance(buffers, Sequence): 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

905 raise TypeError( 2bj

906 f"{what}: buffers must be a sequence of Buffer, got {type(buffers).__name__}" 2bj

907 ) 

908 if not buffers: 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

909 raise ValueError(f"{what}: empty buffers sequence") 2hj

910 out = [] 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

911 for item in buffers: 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

912 if not isinstance(item, Buffer): 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

913 raise TypeError(f"{what}: expected Buffer, got {type(item).__name__}") 2ij

914 Buffer_check_open(<Buffer>item) 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

915 out.append(item) 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

916 return tuple(out) 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f

917  

918cdef inline void Buffer_set_deallocation_stream(Buffer self, object stream): 

919 """Validate and replace a live buffer's deallocation recipe.""" 

920 Buffer_check_open(self) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbeXe:d@d;dce[d=d}eUe)f*f?f@f#h

921 cdef Stream s = Stream_accept(stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbeXe:d@d;dce[d=d}eUe)f*f?f@f#h

922 _apply_deallocation_stream(self._h_ptr, s._h_stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbe:d@d;dce[d=dUe)f*f?f@f#h

923  

924  

925cdef inline void Buffer_close(Buffer self, object stream): 

926 """Close a buffer, freeing its memory.""" 

927 if not self._h_ptr: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

928 return 2{ | Zi

929 # Update deallocation stream if provided 

930 if stream is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

931 Buffer_set_deallocation_stream(self, stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c aebeXe:d@d;dce[d=dUe@f

932 # Reset handle - RAII deleter will free the memory (and release owner ref in C++) 

933 self._h_ptr.reset() 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

934 self._size = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

935 self._memory_resource = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

936 self._ipc_data = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

937 self._owner = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b

938 self._mem_attrs_inited.store(False) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b