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

318 statements  

« prev     ^ index     » next       coverage.py v7.17.2, created at 2026-11-05 01:11 +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() 2,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~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyMf4iNf5iOf6iGyHyIyJyPf7iQf8iKyLyRf9iSf!iTf#iUf$iMyNyVf%iWf'iOyPyQyRySyTyUyVyXf(iYf)iZf*i0f+i1f,i2f-i3f.i4f/i5f:i6f;i7f=i8f?iWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzjgijkgjjlgkjmgljngmjognjSzTzUzVzpgoj~iHjWzXzqgpjajIjrgqjsgrjbjJjYzZztgsjcjKj0z1zugtjvguj2z3z4z5z6z7z8z9z!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~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!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~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z000102030405060708090!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~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!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~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z202122232425262728292!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~2a3b39fc3d3e3f3g3h3i3j3k3!fXjl3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z303132333#fYj435363738393!3#3$fZj$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4%f0jw4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z404142434445464748494!4#4$4%4'4'f(4)4*4+4,4[f-4]f.4/4:4;4=4?4@4[4]4^4_4(f1j`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N52jO5P5Q5R5S5T5U5V5W5X5Y5)f3jZ505152535455565758595!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~5a6b6c6d6e6f6g6h6i6*f4jj6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636+f5j465666768696!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~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7,f6jo7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7071727374757677787-f7j97!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~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8.f8jt8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8/f9j)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@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_!_#_$_%_'_(_)_*_+_,_-_._/_:_;_=_?_@_[_]_^_

45  

46  

47def _live_va_reservation_count() -> int: 

48 return live_va_reservation_count() 2,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~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyMf4iNf5iOf6iGyHyIyJyPf7iQf8iKyLyRf9iSf!iTf#iUf$iMyNyVf%iWf'iOyPyQyRySyTyUyVyXf(iYf)iZf*i0f+i1f,i2f-i3f.i4f/i5f:i6f;i7f=i8f?iWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzjgijkgjjlgkjmgljngmjognjSzTzUzVzpgoj~iHjWzXzqgpjajIjrgqjsgrjbjJjYzZztgsjcjKj0z1zugtjvguj2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=zfh?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~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!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~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z000102030405060708090!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~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!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~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z202122232425262728292!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~2a3b39fc3d3e3f3g3h3i3j3k3!fXjl3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z303132333#fYj435363738393!3#3$fZj$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4%f0jw4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z404142434445464748494!4#4$4%4'4'f(4)4*4+4,4[f-4]f.4/4:4;4=4?4@4[4]4^4_4(f1j`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N52jO5P5Q5R5S5T5U5V5W5X5Y5)f3jZ505152535455565758595!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~5a6b6c6d6e6f6g6h6i6*f4jj6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636+f5j465666768696!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~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7,f6jo7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7071727374757677787-f7j97!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~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8.f8jt8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8/f9j)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@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_!_#_$_%_'_(_)_*_+_,_-_._/_:_;_=_?_@_[_]_^_

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

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() 2/epf:f;f0dxfyfohSh

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

90 except Exception as exc: 2=f#e

91 warnings.warn( 2=f#e

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

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

94 CUDAWarning, 2=f#e

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) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoeke}dlepe~dme8ebgcgfggg~h

109 if status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoeke}dlepe~dme8ebgcgfggg~h

110 raise RuntimeError( 2oe

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) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfke}dlepe~dme8ebgcgfggg~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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

156 # unregistered host pointer 

157 out.is_host_accessible = True 2Vcicjc:d;d=d?d@d[d]d^d_d`d{d

158 out.is_device_accessible = False 2Vcicjc:d;d=d?d@d[d]d^d_d`d{d

159 out.device_id = -1 2Vcicjc:d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t KdLd* + icjc[ $cYd3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t KdLd* + icjc[ $cYd3dh 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 `b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcs t * + icjcYd3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9ca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcKdLd* + icjc[ $c3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9ca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcKdLd* + icjc[ $c3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9ca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcKdLd* + icjc[ $c3dh i j

168 elif memory_type == cydriver.CUmemorytype.CU_MEMORYTYPE_DEVICE: 2`b!cXcs t Yd, - .

169 out.is_host_accessible = False 2`b!cXcs t Yd, - .

170 out.is_device_accessible = True 2`b!cXcs t Yd, - .

171 out.device_id = device_id 2`b!cXcs t Yd, - .

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d

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 dc@bl m n ec'c[b%c]b{bfcgc^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 dc@bl m n ec'c[b%c]b{bfcgc^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 dc@bl m n ec[b]b{bfcgc^b_b

203 with nogil: 2k dc@bl m n ec[b]b{bfcgc^b_b

204 HANDLE_RETURN(cydriver.cuMemcpyWithAttributesAsync(dst, src, nbytes, &cu_attr, hstream)) 2k dc@bl m n ec[b]b{bfcgc^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^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctc2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j

215 with nogil: 2^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctck l m ucn WcOc(c? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j

216 HANDLE_RETURN(cydriver.cuMemcpyAsync(dst, src, nbytes, as_cu(s._h_stream))) 2^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctck l m ucn WcOc(c? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j

217 return 2^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctck l m ucn WcOc(c? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j

218 if not isinstance(options, CopyOptions): 22c3c4ck dc@bl m ucn ec'c[b%c]b{bfcgc^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 dc@bl m ucn ec'c[b%c]b{bfcgc^b_b

223 raise TypeError( 2uc

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

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 dc@bl m n ec'c[b%c]b{bfcgc^b_b

231 raise TypeError( 2'c%c

232 f"{method_name} does not support graph capture with options " 2'c%c

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 dc@bl m n ec[b]b{bfcgc^b_b

239 _do_copy_with_attributes(dst, src, nbytes, options, as_cu(s._h_stream)) 2k dc@bl m n ec[b]b{bfcgc^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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

279  

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

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

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`g'j(jwg[ )jsfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`g'j(jwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

319 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

320 _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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

321 except MemoryError: 

322 # Reset for the same reason as below, inside the handler so the 

323 # destructor cannot swallow the MemoryError that is propagating. 

324 self._h_ptr.reset() 

325 raise 

326 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

327 # Reset before raising: the DevicePtrHandle destructor would otherwise 

328 # invoke _mr_dealloc_callback, which catches any inner exception and 

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

330 self._h_ptr.reset() 2ohSh

331 if _ds_status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2ohSh

332 raise RuntimeError( 2ohSh

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

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

335 "non-default Stream." 

336 ) 

337 HANDLE_RETURN(_ds_status) 

338 else: 

339 self._h_ptr = deviceptr_create_with_owner(c_ptr, owner) 2jgkglgmgngog+epgqgrgsghgtghcugvg`b)cvcPcwcncxcyczcAcBcCcDcEcFc@iFgs t VcKdLd* + icjc$e?fbhRh, - . :d;d=d|i?d@d[d]d^d_d`d{d

340 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

341 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

342 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

343 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

344 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

345 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d

346  

347 @staticmethod 

348 def _reduce_helper(mr, ipc_descriptor): 

349 cdef ContextHandle h_ctx = get_current_context() 

350 cdef int device_id 

351 if not h_ctx: 

352 # Spawned processes unpickle arguments before entering their target, 

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

354 device_id = mr.device_id 

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

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

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

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

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

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

361  

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

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

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

365 # Must not serialize the parent's stream! 

366 Buffer_check_open(self) 2+h,h-h.hTcUc/h:h;h=h?h@h6b7b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b-b.b

367 return Buffer._reduce_helper, (self.memory_resource, self.ipc_descriptor) 2+h,h-h.hTcUc/h:h;h=h?h@h6b7b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b-b.b

368  

369 @staticmethod 

370 def from_handle( 

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

372 owner: object | None = None, 

373 *, 

374 stream: Stream | GraphBuilder | None = None, 

375 ) -> Buffer: 

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

377  

378 Parameters 

379 ---------- 

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

381 Allocated buffer handle object 

382 size : int 

383 Memory size of the buffer 

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

385 Memory resource associated with the buffer. When provided, 

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

387 closed or garbage collected. 

388 owner : object, optional 

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

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

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

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

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

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

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

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

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

398 be freed from a different host thread, 

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

400 refers to a different stream on each thread. 

401  

402 Note 

403 ---- 

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

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

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

407 """ 

408 return Buffer._init(ptr, size, mr=mr, owner=owner, stream=stream) 2^ _ ` { HcIcJcKcLcMcNc; ccoc# $ = ( pco p q ) qcrcsctck dc@bl m n ec[bWcOc]bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b7e%e'e(e@i/e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohzf%g'g'j[ )jsfxgpe=f#etf~dbhnfrf-dRh, - . :d;d=d|i?d@d[d]d^d_d`d{d

409  

410 @classmethod 

411 def from_ipc_descriptor( 

412 cls, mr: DeviceMemoryResource | PinnedMemoryResource | VirtualMemoryResource, 

413 IPCBufferDescriptor ipc_descriptor not None: IPCBufferDescriptor, 

414 *, Stream stream not None: Stream 

415 ) -> Buffer: 

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

417  

418 Parameters 

419 ---------- 

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

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

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

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

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

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

426 access options. 

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

428 The descriptor exported from another process. 

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

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

431 the buffer is closed or garbage collected. 

432  

433 Note 

434 ---- 

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

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

437 cooperating. 

438 """ 

439 return _ipc.Buffer_from_ipc_descriptor(cls, mr, ipc_descriptor, stream) 2? ~_a`b`(gghAhEgUhih{g[h#cjhahch

440  

441 @property 

442 @cython.critical_section 

443 def ipc_descriptor(self) -> IPCBufferDescriptor: 

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

445  

446 A pool-backed buffer caches its descriptor; a 

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

448 """ 

449 Buffer_check_open(self) 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b#c+b,b~bac-b.b$eahIfch[f]f

450 cdef object ipc_data 

451 if self._ipc_data is None: 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b#c+b,b~bac-b.bahIfch[f]f

452 ipc_data = IPCDataForBuffer(_ipc.Buffer_get_ipc_descriptor(self), False) 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b#c+b,b~bac-b.bahIfch[f]f

453 if self._ipc_data is None: 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b~bac-b.bIf[f]f

454 self._ipc_data = ipc_data 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b~bac-b.bIf[f]f

455 return self._ipc_data.ipc_descriptor 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b~bac-b.bIf[f]f

456  

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

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

459  

460 This buffer is released back to their memory resource 

461 asynchronously on the given stream. 

462  

463 Parameters 

464 ---------- 

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

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

467 the deallocation stream stored in the handle is used. 

468  

469 See Also 

470 -------- 

471 set_deallocation_stream 

472 Change the deallocation stream without closing the buffer. 

473 """ 

474 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

475  

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

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

478  

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

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

481 pointer handle uses the replacement stream. 

482  

483 This method does not synchronize streams or establish dependencies. 

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

485 before the deallocation on ``stream``. 

486  

487 Parameters 

488 ---------- 

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

490 The stream to use for eventual asynchronous deallocation. 

491  

492 Raises 

493 ------ 

494 RuntimeError 

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

496 cannot be bound because no CUDA context is current. 

497 TypeError 

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

499  

500 Notes 

501 ----- 

502 Synchronizing concurrent mutation and destruction of the same buffer 

503 is the caller's responsibility. 

504 """ 

505 Buffer_set_deallocation_stream(self, stream) 27dwf!enfbgcgfg~h

506  

507 def __enter__(self): 

508 return self 2)e*eZdhgfh? (ghhEg|g#cMd7ehd}gGh~gkhlhXc/ of4d.e: @ d e f g 9eVdQc1d2dveZc0c

509  

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

511 self.close() 2)e*eZdhgfh? (ghhEg|g#cMd7ehd}gGh~gkhlhXc/ of4d.e: @ d e f g 9eVdQc1d2dveZc0c

512 return False 2)e*eZdhgfh? (ghhEg|g#cMd7ehd}gGh~gkhlhXc/ of4d.e: @ d e f g 9eVdQc1d2dveZc0c

513  

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

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

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

517  

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

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

520 allocated using the associated memory resource before the copy. 

521  

522 Parameters 

523 ---------- 

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

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

526 is allocated using this buffer's memory resource. 

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

528 Keyword argument specifying the stream for the 

529 asynchronous copy 

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

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

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

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

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

535 capturing stream either, since a graph cannot represent these 

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

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

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

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

540 instead of silently downgrading its guarantee. 

541  

542 Raises 

543 ------ 

544 TypeError 

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

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

547 or a stream currently in graph capture mode. 

548 RuntimeError 

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

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

551 back to a plain copy cannot honor that guarantee. 

552  

553 """ 

554 Buffer_check_open(self) 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j

555 cdef Stream s = Stream_accept(stream) 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j

556 cdef size_t src_size = self._size 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j

557  

558 if dst is None: 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j

559 if self._memory_resource is None: 2k ?f

560 raise ValueError("a destination buffer must be provided (this " 2?f

561 "buffer does not have a memory_resource)") 

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

563 else: 

564 Buffer_check_open(dst) 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$ekelemeh i j

565  

566 cdef size_t dst_size = dst._size 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*ckelemeh i j

567 if dst_size != src_size: 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*ckelemeh i j

568 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 26d

569 f"are: src={src_size}, dst={dst_size})" 26d

570 ) 

571 _dispatch_buffer_copy( 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g *ckelemeh i j

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

573 return dst 2/bRcSc:b;b=b?b% r ' o p q k @bl m ucn [bOc(c]b{b^b_ba b c / : @ d e f g *ckelemeh i j

574  

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

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

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

578  

579 Parameters 

580 ---------- 

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

582 Source buffer to copy data from 

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

584 Keyword argument specifying the stream for the 

585 asynchronous copy 

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

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

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

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

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

591 capturing stream either, since a graph cannot represent these 

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

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

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

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

596 instead of silently downgrading its guarantee. 

597  

598 Raises 

599 ------ 

600 TypeError 

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

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

603 or a stream currently in graph capture mode. 

604 RuntimeError 

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

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

607 back to a plain copy cannot honor that guarantee. 

608 """ 

609 Buffer_check_open(self) 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd$e

610 Buffer_check_open(src) 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd$e

611 cdef Stream s = Stream_accept(stream) 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd

612 cdef size_t dst_size = self._size 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd

613 cdef size_t src_size = src._size 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd

614  

615 if src_size != dst_size: 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd

616 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 2|d

617 f"are: src={src_size}, dst={dst_size})" 2|d

618 ) 

619 _dispatch_buffer_copy( 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(eNd

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

621  

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

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

624  

625 Parameters 

626 ---------- 

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

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

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

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

631 Stream for the asynchronous fill operation. 

632  

633 Raises 

634 ------ 

635 TypeError 

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

637 ValueError 

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

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

640 OverflowError 

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

642  

643 """ 

644 Buffer_check_open(self) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf$e

645 cdef Stream s_stream = Stream_accept(stream) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf

646 cdef unsigned int val 

647 cdef unsigned int elem_size 

648 val, elem_size = _parse_fill_value(value) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf

649  

650 cdef size_t buffer_size = self._size 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d

651 cdef cydriver.CUdeviceptr dst = as_cu(self._h_ptr) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d

652 cdef cydriver.CUstream s = as_cu(s_stream._h_stream) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d

653  

654 if elem_size == 1: 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d

655 with nogil: 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ OdPdQdRdSdTdUdwdxdydzdAdBdCdDdEdFdGdHdIdJd

656 HANDLE_RETURN(cydriver.cuMemsetD8Async(dst, val, buffer_size, s)) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ OdPdQdRdSdTdUdwdxdydzdAdBdCdDdEdFdGdHdIdJd

657 elif elem_size == 2: 

658 if buffer_size & 0x1: 28djdmdndodsdtd!d$d+c.c/c:c@c[c'd)d_c|c}c~cdded+d

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

660 with nogil: 2jdmdndodsdtd+c.c/c:c@c[c_c|c}c~cdded

661 HANDLE_RETURN(cydriver.cuMemsetD16Async(dst, val, buffer_size // 2, s)) 2jdmdndodsdtd+c.c/c:c@c[c_c|c}c~cdded

662 elif elem_size == 4: 

663 if buffer_size & 0x3: 29dkdldpdqdrdudvd#d%d,c-c;c=c?c]c^c(d*d`c{cadbdcdfdgd,d

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

665 with nogil: 2kdldpdqdrdudvd,c-c;c=c?c]c^c`c{cadbdcdfdgd

666 HANDLE_RETURN(cydriver.cuMemsetD32Async(dst, val, buffer_size // 4, s)) 2kdldpdqdrdudvd,c-c;c=c?c]c^c`c{cadbdcdfdgd

667  

668 def __dlpack__( 

669 self, 

670 *, 

671 stream: int | None = None, 

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

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

674 copy: bool | None = None, 

675 ) -> object: 

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

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

678 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid$e[ $ch i j 5c6cbc

679 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc

680 raise BufferError("Sorry, not supported: dl_device other than None") 2id

681 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc

682 raise BufferError("Sorry, not supported: copy=True") 2id

683 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc

684 versioned = False 2pfid

685 else: 

686 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g id[ $ch i j 5c6cbc

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

688 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g id[ $ch i j 5c6cbc

689 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc

690  

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

692 Buffer_check_open(self) 2:fqf;fkcGc$e[ $c5c6cbc

693 return classify_dl_device(self) 2:fqf;fkcGc[ $c5c6cbc

694  

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

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

697 # This raises a BufferError unless: 

698 # 1. Python is 3.12+ 

699 # 2. This Buffer object is host accessible 

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

701  

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

703 # Supporting method paired with __buffer__. 

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

705  

706 @property 

707 def device_id(self) -> int: 

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

709 Buffer_check_open(self) 2[i]i^i,e-e!cXcqfids t VcKdLd* + icjc$emhnh_i`i{i@fdheh)gLf5d5c6c, - QcveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d

710 if self._memory_resource is not None: 2[i]i^i,e-e!cXcqfids t VcKdLd* + icjcmhnh_i`i{i@fdheh)gLf5d5c6c, - QcveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d

711 return self._memory_resource.device_id 2[i]i^i,e-eqfidmhnh_i`i{i@fdheh)gLf5d5c6cQcveWdXdwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6eZc0cbc

712 _init_memory_attrs(self) 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d

713 return self._mem_attrs.device_id 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d

714  

715 @property 

716 def handle(self) -> int: 

717 """Return the buffer handle object. 

718  

719 .. caution:: 

720  

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

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

723 """ 

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

725 # that expect a raw pointer value 

726 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 6h7h8h9h!h#h$h^f%h'h_fvh`fdj(h)h*h0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNc[i]i^iGg{fHgIg|fJg}f~fKgLgMgNgOgPgQg/bRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e9g6 7 8 *eZd; ccoc# $ % r ' = ( pco p q ) qcrcsctck dc@bl m n ec[bWcOc(c]b{bfcgc^b_bphjgqhkgrhlgshmgthngog+epgqgrgsgtghcuguhvg1c`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghBhEgChDhEhFhih{g#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^h_h!g#g}g`h~g!caglhXca b c %e'e(e/ @i.e: FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9eNd*c7dwfpfids t * + wd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0dke}dWhXhwg[ $cle_i`i{isfxgtf~dmeufYhHhIhJhKh)g{hfgrfLhMhNhOhLf*gPh~h1hQhh i j }i!jRhaeVd5d5c6c, - beQc.d2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?dHf@d[d]d^d_d`dZc0cbc{d

727  

728 @property 

729 def is_closed(self) -> bool: 

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

731 return self._h_ptr.get() == NULL 2phqhrhshth3hhg4h5huhFgVh!egg}i

732  

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

734 if not isinstance(other, Buffer): 2{f|f}f~f!jRh__*j#j$j

735 return NotImplemented 2!j__

736 cdef Buffer other_buf = <Buffer>other 2{f|f}f~f!jRh*j#j$j

737 return (as_intptr(self._h_ptr) == as_intptr(other_buf._h_ptr) and 2{f|f}f~f!jRh*j#j$j

738 self._size == other_buf._size) 2!jRh#j$j

739  

740 def __hash__(self) -> int: 

741 return hash((as_intptr(self._h_ptr), self._size)) 2Rhc`d`e`f`#j$j

742  

743 def __repr__(self) -> str: 

744 maybe_is_mapped = " is_mapped=True" if self.is_mapped else "" 2}i+j

745 return f"<Buffer ptr={as_intptr(self._h_ptr):#x} size={self._size}{maybe_is_mapped}>" 2}i+j

746  

747 @property 

748 def is_device_accessible(self) -> bool: 

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

750 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 !cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjc0d$e[ $cig@fIfLfh i j 5d5c6c, - Qc. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d

751 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 !cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjc0d[ $cig@fIfLfh i j 5d5c6c, - Qc. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d

752 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcid0d[ $cig@fIfLfh i j 5d5c6cQcwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6eZc0cbc

753 _init_memory_attrs(self) 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d

754 return self._mem_attrs.is_device_accessible 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d

755  

756 @property 

757 def is_host_accessible(self) -> bool: 

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

759 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjcOdjdkdPdldQdRdSdmdndodpdqdrdTdUdsdtdudvdwd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0d$exfyf[ $cig@fIfLf*gh i j 5d5c6c, - Qc. bc

760 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjcOdjdkdPdldQdRdSdmdndodpdqdrdTdUdsdtdudvdwd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0dxfyf[ $cig@fIfLf*gh i j 5d5c6c, - Qc. bc

761 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcidOdjdkdPdldQdRdSdmdndodpdqdrdTdUdsdtdudvdwd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0dxfyf[ $cig@fIfLf*gh i j 5d5c6cQcbc

762 _init_memory_attrs(self) 2s t VcKdLd* + icjc, - .

763 return self._mem_attrs.is_host_accessible 2s t VcKdLd* + icjc, - .

764  

765 @property 

766 def is_managed(self) -> bool: 

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

768 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`ba b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGc$e[ $cYd3dh i j

769 _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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`ba b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGc[ $cYd3dh i j

770 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`ba b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGc[ $cYd3dh i j

771 return True 27c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9cGc[ $c

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

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

774 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcYd3dh i j

775  

776 @property 

777 def is_mapped(self) -> bool: 

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

779 return getattr(self._ipc_data, "is_mapped", False) 2| } ncAh{gjh0d}i+j

780  

781  

782 @property 

783 def memory_resource(self) -> MemoryResource: 

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

785 return self._memory_resource 2vh^ _ ` { HcIcJcKcLcMcNc; oc# $ = ( pc) qcrcsctc+h,h-h.hejQiRiSiTi? TcUc)cUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3ifjgjhj6b7bvc|b}b8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczhghThBhhhEgChDhEhFhih{g|g]h#c+b,bCcDc~bacEcFc-b.b7ehd!cXc/e9e0dkeigleah@fmeIfchHhIhZhJhdhehKh)gbgcg|hLhMhNhOhLf0h*g-dPh2hQh[f]f5dQc:d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAf2e3eBf4e5e6e?d@d[d]d^d_d`dZc0cbc{d

786  

787 @property 

788 def size(self) -> int: 

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

790 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 vh0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNc[i]i^i/bSc:b;b=b?b6 7 8 ; ccoc# $ % r ' = ( Njpco p q ) qcrcsctcOjPjQjlcmck dc@bl m n ec[bWcOc(c]b{bfcgc^b_bphjgqhkgrhlgshmgthngog+epgqgrgsgtghcuguhvg`b+h,h-h.hQiRiSiTi? TcUc)cUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhEgChDhEhUhFhih{g|gjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd}g~g!cagkha b c %e'e(e9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g 7dwfpfid0dmhnhkeWhXhwg[ $cigle_i`i{i@fmeIfufYhHhIhZhJhdhehKh)gbgcgrfLhMhNhOh}hLf0h*gPh~h1h2hQhh i j Rh[f]fVd5d5c6cQc.dcedeeefegeheie1djeveWdXdwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAf2e3eBf4e5e6eZc0cbc

791  

792 @property 

793 def owner(self) -> object: 

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

795 return self._owner 2Vc

796  

797  

798cdef class MemoryResource: 

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

800 deallocation of buffers. 

801  

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

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

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

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

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

807 resource's respective property.) 

808 """ 

809  

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

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

812  

813 Parameters 

814 ---------- 

815 size : int 

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

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

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

819 asynchronously. Must be passed explicitly; pass 

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

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

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

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

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

825 each thread. 

826  

827 Returns 

828 ------- 

829 Buffer 

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

831 depending on the resource's properties. 

832 """ 

833 raise TypeError("MemoryResource.allocate must be implemented by subclasses.") 2%j

834  

835 def deallocate( 

836 self, 

837 ptr: DevicePointerType, 

838 size_t size, 

839 *, 

840 stream: Stream | GraphBuilder 

841 ) -> None: 

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

843  

844 Parameters 

845 ---------- 

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

847 The pointer or handle to the buffer to deallocate. 

848 size : int 

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

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

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

852 asynchronously. Must be passed explicitly; pass 

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

854 """ 

855 raise TypeError("MemoryResource.deallocate must be implemented by subclasses.") 2%j

856  

857 @property 

858 def is_device_accessible(self) -> bool: 

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

860 raise TypeError("MemoryResource.is_device_accessible must be implemented by subclasses.") 2%j

861  

862 @property 

863 def is_host_accessible(self) -> bool: 

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

865 raise TypeError("MemoryResource.is_host_accessible must be implemented by subclasses.") 2%j

866  

867 @property 

868 def is_managed(self) -> bool: 

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

870 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcYd3dh i j

871  

872 @property 

873 def device_id(self) -> int: 

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

875 raise TypeError("MemoryResource.device_id must be implemented by subclasses.") 2%j

876  

877  

878# Buffer Implementation Helpers 

879# ----------------------------- 

880cdef Buffer Buffer_from_deviceptr_handle( 

881 DevicePtrHandle h_ptr, 

882 size_t size, 

883 MemoryResource mr, 

884 object ipc_descriptor = None, 

885 type cls = Buffer, 

886): 

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

888 cdef Buffer buf = cls.__new__(cls) 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

889 buf._h_ptr = h_ptr 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

890 buf._size = size 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

891 buf._memory_resource = mr 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

892 buf._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

893 buf._owner = None 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

894 buf._mem_attrs_inited.store(False) 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

895 return buf 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc

896  

897  

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

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

900  

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

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

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

904 """ 

905 cdef list out 

906 if isinstance(buffers, Buffer): 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgegwhxhyh

907 raise TypeError( 2Mjwhxhyh

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

909 ) 

910 if not isinstance(buffers, Sequence): 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

911 raise TypeError( 2Lj

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

913 ) 

914 if not buffers: 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

915 raise ValueError(f"{what}: empty buffers sequence") 2Rj

916 out = [] 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

917 for item in buffers: 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

918 if not isinstance(item, Buffer): 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

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

920 Buffer_check_open(<Buffer>item) 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

921 out.append(item) 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

922 return tuple(out) 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg

923  

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

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

926 Buffer_check_open(self) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoe!eke}dlepe~dmenf8ebgcgfggg~h

927 cdef Stream s = Stream_accept(stream) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoe!eke}dlepe~dmenf8ebgcgfggg~h

928 _apply_deallocation_stream(self._h_ptr, s._h_stream) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoeke}dlepe~dme8ebgcgfggg~h

929  

930  

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

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

933 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

934 return 2~ abFg}i

935 # Update deallocation stream if provided 

936 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

937 Buffer_set_deallocation_stream(self, stream) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c neoe!eke}dlepe~dme8egg

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

939 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

940 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

941 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

942 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

943 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc

944 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc